C++私有函数:是否通过函数参数传递类成员变量

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,我真的把它分成两个函数使代码更具可读性.

是的,这更像是一个讨论问题,而不是一个"答案"问题,但我对这个推理更感兴趣.我会将答案标记为答案,提供良好的推理或良好的标准.

另外,请记住,这只是一个玩具示例.在现实中,这个班级将比这更大,因此组织很重要.

rod*_*igo 1

f()问问自己:使用 以外的对象进行调用现在有任何意义吗?或者在可预见的将来有什么意义吗m_Member1

如果答案是:

  • 。执行无参数,f()因为m_Member1这是 的固有部分A
  • 是的。做f(CMyClass &). 即使现在您只使用m_Member1,这也不是您处理的类的固有属性。
  • 或许。嗯...我会说选择无参数f()。总是可以选择改变您的想法(实际上,这种改变相当微不足道)。

另请注意,一个函数f()可以调用另一个函数g(CMyClass &),但反之则不行。因此,这可能会限制您的选择,具体取决于具体f()情况。