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