这是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
上运行,而且我真的在破坏它分为两个功能,以使代码更具可读性。是的,这比“回答”问题更多的是讨论问题,但我对推理更感兴趣。我将标出合理推理或标准的回答标记为答案。
另外,请记住,这只是一个玩具示例。实际上,这个类(class)比这个类还要大,因此组织很重要。
最佳答案
问问自己:用f()
以外的其他对象调用m_Member1
现在有什么意义,或者在可预见的将来有什么意义?
如果答案是:
f()
,因为m_Member1
是A
的固有部分。 f(CMyClass &)
。即使现在仅使用m_Member1
,这也不是您处理的类的固有属性。 f()
。总有改变主意的选择(实际上,这种改变很琐碎)。 还要注意,函数
f()
可以调用另一个函数g(CMyClass &)
,但不能相反。因此,根据f()
的功能,可能会限制您的选择。