C++中设置成员变量为private

在C++类设计中,C++成员变量都应该设置为private,其理由如下:

1)保持语法一致性

如果所有的成员变量都是private,那么用户访问成员变量时都必须通过调用函数,保证了调用的一致性。如类对象a,它有一个成员函数GetName(), 它调用函数获取成员变量name的形式:a->GetName(),而如果直接将name声明为public,那么它的调用形式为:a->name。也即类对象调用成员函数和成员变量的形式是不一样的,造成了语法上的不一致性。

2)可以对成员变量的处理有更精确的控制

如果将成员变量设置为public,那么用户可以对其进行随意的读写操作,而如果用成员函数来控制,那么可以实现其是否可访问,是否可读,是否可写等属性。如:

 1 class AccessLevels
 2 {
 3     public:
 4         int getReadOnly() const { return readOnly; }
 5         void setReadWrite(int value) { readWrite = value;}
 6         int getReadWrite() const { return readWrite; }
 7         void setWriteOnly(int value) { writeOnly = value; }
 8     private:
 9         int noAccess; //can't access
10         int readOnly; // only can read
11         int readWrite; // can read and write
12         int writeOnly; // only can write
13 };
View Code

 3)满足封装性

public成员变量不具备封装性,用户可以读写它们,这样一来就有可能发生这种情况:如果在后期的维护中某一个public成员变量被取消了,那么这就必须在所有使用过这种成员变量的代码中进行修改,因而可能会造成大量的代码破坏量。如果将成员变量控制在函数中,那么实现的可能性就会有很多种,即弹性很大,可以在读取或修改时通知其他对象,可以验证class的约束条件,可是实现多线程中的同步控制等等。

此外,protected与public成员变量类似的无法满足上面的三个条件,因此在类的声明和定义中,最好将成员变量声明为private属性。

 

以上整理子Effective C++中文版第三版 case22.

posted on 2013-05-21 09:21  Sophia-呵呵小猪  阅读(1090)  评论(0)    收藏  举报