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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,760评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,891评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,161评论 25 708
  • 当年我让我爸给我买iPhone4 我爸说“ iPhone4?我还给你买iPhone8呢!” 爸爸 明天就是你实现承...
    小贷说事儿阅读 277评论 0 0
  • 真正的情报工作不是一场游戏,而是一场苛刻的交易。交易一旦失败,失败者就要付出高昂的代价——那将是一个人的生命
    夏景景阅读 227评论 0 1