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

标签 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 */ }
};

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

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 */ }
};

然后我的 DoThing 函数将来可以复制到其他地方。我是最好编写函数来获取所有相关参数,还是该函数只接收非成员参数?

如果答案是“您应该编写函数来获取所有相关参数”,为什么还要费心将它放在一个类中呢?

什么时候应该使用自由函数,什么时候应该使用成员函数?

最佳答案

从上下文中假设“在 B 上做某事”函数B 成员而不是 A 中的其他状态上运行然后:

  • 如果函数直接操纵/操作 B 的私有(private)状态,那么它们应该是 B 的成员。
  • 否则它们应该是自由函数。

关于c++ - 你应该在成员函数中传递成员变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25275516/

相关文章:

php - 在我自己的类中使用 mysqli_result::fetch_object 不起作用

c++ - 无法在 Logcat 上显示加密文本

C++:与 Arduino 的串行接口(interface)

c++ - 在 Windows 中使用 C++ 截取窗口截图的最佳方法是什么?

c++ - 对是或否陈述的无效回答

list - 在模式中重用列表

c# - 与相关类紧密耦合?

C# - 接口(interface)说明

iOS 创建可重用 View 的问题

c++ - 在循环c++中重用线程