Вот вопрос, который снова и снова возникает в реализации класса 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
}
Я думаю, что я всегда предпочитаю второй, потому что тогда f
может работать с любым экземпляром CMyClass
, но, тем не менее, у меня есть много кода, первый из которых является абсолютно допустимым, поскольку f
будет работать только когда-либо на m_Member1
, и я действительно разбил его на две функции, чтобы сделать код более читабельным.
Да, это скорее вопрос для обсуждения, чем вопрос с ответом, но меня больше интересуют рассуждения. Я отмечу в качестве ответа ответ, который дает хорошее обоснование или хороший критерий.
Кроме того, имейте в виду, что это всего лишь игрушечный пример. Класс будет больше, чем этот в реальности, и поэтому организация важна.