这是一个在 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
,我真的把它分成两个函数来使代码更具可读性。
是的,这更像是一个讨论问题而不是“答案”问题,但我对推理更感兴趣。我会将给出良好推理或良好标准的回答标记为答案。
另外,请记住,这只是一个玩具示例。班级实际上会比这更大,因此组织很重要。