这是Effective C++中第22个原则,原话是Declare data members private,即把数据成员称名为私有的访问权限。
为什么要这样做?
先说public,public是提供用户的接口,它根本不具备封装特性。从实际来看,被声明为public的都是成员函数,用户通过操作成员函数来操作类内的成员,而至于说这个接口的内部细节对于用户来说是不可见的,其中一个典型的例子就是getter和setter的运用。
再有就是通过把public成员函数作为接口提供给用户,那么这个接口的实现会有若干种可能以应对不同的需求。还是因为它是接口,是给用户使用的,所以它不能变来变去的,否则你叫用户怎么用。所以一旦某个成员函数被声明为public的,那么一般情况下它就不能再有任何变化了,当然这个变化是从用户的角度来看。从而推出越是广泛使用的类,public成员声明就越不能改变。
在这里有个普遍的准则,那就是封装的越好,改变成员时所破坏的代码量就越少。
protected并不比public封装性更好,因为你改变public只是改变用户代码,而你改变protected则可能导致所有子类的代码的破坏,它俩的代码破坏量都不可估量,后者更甚。
所以成员一旦声明为protected和public那就意味着它们应该是永远不变的。
所以从封装的角度讲只有两中访问权限可言,那就是private封装和其他不封装。
原则22:将成员变量声明为private
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...