これは、C++クラスの実装で何度も出てくる質問です。人々の考えがここにあるのか知りたいです。どのコードが好きですか、そしてその理由は何ですか?
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(void);
CMyClass m_Member1;
};
と
void A::publicCall(void)
{
f();
}
void A::f(void)
{
// do some stuff populating m_Member1
}
または代替:
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(CMyClass &x);
CMyClass m_Member1;
};
と
void A::publicCall(void)
{
f(m_Member1);
}
void A::f(CMyClass &x)
{
// do some stuff to populate x,
// locally masking the fact that it's really m_Member1
}
私は常に2番目のものを好むと思います。なぜなら、その後f
は任意のインスタンスで操作できるからですCMyClass
が、それでも、最初のコードは完全に有効であるため、f
これまでにのみ操作されるのでm_Member1
、実際には2つの関数に分割しています。コードを読みやすくします。
はい、これは「答え」の質問というよりは議論の質問ですが、私は推論にもっと興味があります。私は答えとして、良い推論または良い基準を与える応答をマークします。
また、これは単なるおもちゃの例であることに注意してください。クラスは実際にはこれよりも大きくなるため、組織化が重要です。