这里有点风格问题。假设我有一个类 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/