你是否应该在成员函数中传递成员变量?
这里排序样式问题。 假设我有一个A
类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
(或其他成员变量和一些传递的参数)。 如果我想让这些功能在该课程以外的将来重用,我最好把它们写成:
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
在构件而不是其他状态A
则:
B
的私有状态,那么它们应该是B
成员。 成员函数是一个成员函数,因为它的作用域可以访问成员变量而不必使用引用和指针语法。 正如前面提到的那样,这很可能会使编码和维护变得更简单,所以您可以使用此方法,除非您需要该函数是一个可以采用相同类型数据但不同类的自由函数,在这种情况下您必须通过通过引用或使用指针来访问变量的范围。
你是否应该在成员函数中传递成员变量?
没有必要将成员变量传递给成员函数,因为成员函数可以访问所有数据成员。
它类似于访问静态文件局部变量的独立函数。 这些函数可以访问相同翻译单元中静态声明的变量。
什么时候应该使用独立功能,什么时候应该使用成员函数?
通常,在功能与对象关联时使用成员函数。
使用独立功能时
该类有静态成员
或功能与类相关联,并且不使用静态成员。
当相同的功能可以应用于不同的对象时,您也可以使用独立功能。
例如,让我们谈谈序列化或输出一个对象。
你可以在一个对象中定义一个方法load_from_buffer()
,但它不适用于POD类型。
但是,如果函数load_from_buffer()
是独立的,它可以针对不同类型(例如int
, char
, double
和模板)重载,可以重载调用从接口派生的对象。
概要
当需要访问对象的数据成员时,更喜欢使用成员方法。 当他们访问静态数据成员时使用静态成员方法,或者需要没有对象实例的功能(想想封装)。 独立功能还可以根据功能过载为不同对象提供功能。
没有硬性规定,只是使用你认为最容易维护的内容,协助正确性和稳健性,加快发展速度。
只是为了迷惑人们,这里是Scott Meyers的一篇文章:
非成员函数如何增加封装
请记住,为了让独立函数访问对象的数据成员,数据成员必须被赋予公共访问权限,或者该函数需要成为对象的朋友。 经典的例子是为一个类重载流操作符。
链接地址: http://www.djcxy.com/p/80813.html上一篇: Should you pass member variables within member functions?