你应该在成员函数中传递成员变量吗?

Aur*_*ius 7 c++ oop reusability

这里有一个风格问题.假设我有一个类A,它必须对其成员变量执行一系列相当复杂的事情B b

class A {
 public:
  void DoStuffOnB(){
   DoThing1();
   DoThing2();
   DoThing3();
  }
 private:
  B b;
  void DoThing1(){ /* modify b */ }
  void DoThing2(){ /* modify b */ }
  void DoThing3(){ /* modify b */ }
};
Run Code Online (Sandbox Code Playgroud)

其中DoThings功能仅依赖于b(或其它成员变量和一些传递的参数).如果我想让这些函数在将来可以在该类之外重用,我最好把它们写成:

class A {
 public:
  void DoStuffOnB(){
   DoThing1(b);
   DoThing2(b);
   DoThing3(b);
  }
 private:
  B b;
  void DoThing1(B& b){ /* modify b */ }
  void DoThing2(B& b){ /* modify b */ }
  void DoThing3(B& b){ /* modify b */ }
};
Run Code Online (Sandbox Code Playgroud)

然后我的DoThing功能可以在将来的其他地方复制.我最好编写函数来获取所有相关参数,或者该函数是否只采用非成员参数?

如果答案是"你应该编写函数来获取所有相关参数",为什么还要把它放在一个类中呢?

什么时候应该使用免费功能,何时使用会员功能?

Mar*_*k B 3

从上下文中假设“在 B 上执行某些操作”函数仅对成员进行操作B,而不是对其他状态进行操作A

  • 如果函数直接操作/操作 的私有状态,B那么它们应该是 的成员B
  • 否则它们应该是免费函数。