原则22:将成员变量声明为private

这是Effective C++中第22个原则,原话是Declare data members private,即把数据成员称名为私有的访问权限。
为什么要这样做?
先说public,public是提供用户的接口,它根本不具备封装特性。从实际来看,被声明为public的都是成员函数,用户通过操作成员函数来操作类内的成员,而至于说这个接口的内部细节对于用户来说是不可见的,其中一个典型的例子就是getter和setter的运用。
再有就是通过把public成员函数作为接口提供给用户,那么这个接口的实现会有若干种可能以应对不同的需求。还是因为它是接口,是给用户使用的,所以它不能变来变去的,否则你叫用户怎么用。所以一旦某个成员函数被声明为public的,那么一般情况下它就不能再有任何变化了,当然这个变化是从用户的角度来看。从而推出越是广泛使用的类,public成员声明就越不能改变。
在这里有个普遍的准则,那就是封装的越好,改变成员时所破坏的代码量就越少。
protected并不比public封装性更好,因为你改变public只是改变用户代码,而你改变protected则可能导致所有子类的代码的破坏,它俩的代码破坏量都不可估量,后者更甚。
所以成员一旦声明为protected和public那就意味着它们应该是永远不变的。
所以从封装的角度讲只有两中访问权限可言,那就是private封装和其他不封装。

你可能感兴趣的:(原则22:将成员变量声明为private)