Chr*_* A. 7 c++ function private-methods
这是C++类实现中一次又一次出现的问题.我很好奇人们的想法在这里.您更喜欢哪种代码?为什么?
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(void);
CMyClass m_Member1;
};
Run Code Online (Sandbox Code Playgroud)
同
void A::publicCall(void)
{
f();
}
void A::f(void)
{
// do some stuff populating m_Member1
}
Run Code Online (Sandbox Code Playgroud)
或替代方案:
class A
{
public:
/* Constructors, Destructors, Public interface functions, etc. */
void publicCall(void);
private:
void f(CMyClass &x);
CMyClass m_Member1;
};
Run Code Online (Sandbox Code Playgroud)
同
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
}
Run Code Online (Sandbox Code Playgroud)
我想我总是更喜欢第二个,因为那时f可以操作任何实例,CMyClass但是,说,我有很多代码,第一个是完全有效的,因为f只会操作m_Member1,我真的把它分成两个函数使代码更具可读性.
是的,这更像是一个讨论问题,而不是一个"答案"问题,但我对这个推理更感兴趣.我会将答案标记为答案,提供良好的推理或良好的标准.
另外,请记住,这只是一个玩具示例.在现实中,这个班级将比这更大,因此组织很重要.
f()问问自己:使用 以外的对象进行调用现在有任何意义吗?或者在可预见的将来有什么意义吗m_Member1?
如果答案是:
f()因为m_Member1这是 的固有部分A。f(CMyClass &). 即使现在您只使用m_Member1,这也不是您处理的类的固有属性。f()。总是可以选择改变您的想法(实际上,这种改变相当微不足道)。另请注意,一个函数f()可以调用另一个函数g(CMyClass &),但反之则不行。因此,这可能会限制您的选择,具体取决于具体f()情况。