这是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_Member1A的固有部分。
  • 。进行f(CMyClass &)。即使现在仅使用m_Member1,这也不是您处理的类的固有属性。
  • 也许。好吧...我想说说无参数f()。总有改变主意的选择(实际上,这种改变很琐碎)。

  • 还要注意,函数f()可以调用另一个函数g(CMyClass &),但不能相反。因此,根据f()的功能,可能会限制您的选择。

    09-25 19:48