将成员变量声明为private

如果成员变量不是public,客户唯一能够访问对象的办法就是通过成员函数。
使用成员函数可以让你对成员变量的处理有更精准的控制。
将成员变量隐藏在函数接口的背后,可以为"所有可能的实现"提供弹性。
某些东西的封装性与“与其内容改变时可能造成的代码破坏量”成反比。

假如我们有一个public成员变量,而我们最终取消了它。多少代码可能会被破坏?所有使用它的客户码都会被破坏,而那是一个不可知的大量。因此public成员变量完全没有封装性。假设我们有一个protected成员变量,而我们最终取消了它,有多少代码被破坏?所有使用它的derived class都会被破坏,那往往也是个不可知的大量。因此,protected成员变量就像public成员变量一样缺乏封装性,因为在这两种情况下,如果成员变量被改变,都会有不可预知的大量代码受到破坏。一旦你将一个成员变量声明为public或protected而客户使用它,就很难改变那个成员变量所涉及的一切。太多代码需要重写、重新测试、重新编写文档、重新编译。从封装的角度看,只有两种访问权限:private(提供封装)和其他(不提供封装)

请记住:

  • 切记将成员变量声明为private。这可赋予客户访问数据的一致性、可细微划分访问控制、允诺约束条件获得保证,并提供class作者已充分的实现弹性。
  • protected并不比public更具封装性。

22. Declare data members private相关推荐

  1. [EffectiveC++]item22:Declare data members private

    将成员变量隐藏在函数接口的背后,可以为"所有可能的实现"提供弹性, 假设我们有一个public成员变量,而我们最终取消了它,多少代码可能会被破坏呢?那是一个不可知的大量. prot ...

  2. Effective C#: Item 1 Always use properties instead of accessible data members

    Effective C#: Item 1 Always use properties instead of accessible data members Item 1: 当设计类时,永远用Prope ...

  3. Fabric中的Transient Data与Private Data

    在Hyperledger Fabric中有两个相关的概念:私有数据(Private Data)和暂态数据(Transient Data).本文提供四个示例程序,分别对应私有数据和暂态数据的四种组合使用 ...

  4. only static const integral data members can be initialized within a class

    翻译一下:只有静态整型常量数据成员能在类中初始化 那么哪些数据属于整型呢,下面的都是 char short int long long long 所以只有以上这些类型的数据能在类中初始化,也就是你可以 ...

  5. Effective C++ 读书笔记之Part4.Design and Declarations

    18. Make interfaces easy to use correctly and hard to use incorrrectly. 总结: 第一,好的接口很容易被正确使用,不容易被误用.你 ...

  6. Effective C++:改善程序与设计的55个具体做法

    Effective C++:改善程序与设计的55个具体做法 二.构造/析构/赋值运算 05 Know what functions C++ silently writes and calls. 06 ...

  7. Effective C++读书笔记 摘自 pandawuwyj的专栏

    Effective C++读书笔记(0)       Start   声明式(Declaration):告诉编译器某个东西的名称和类型,但略去细节.   std::size_t numDigits(i ...

  8. effective c++第四章(条款18-25)

    第四章:设计与声明 设计与声明 条款18:让接口容易被正确使用,不易被使用(Make interfaces easy to use correctly and hard to use incorrec ...

  9. Effective C++改善程序与设计的55个具体做法笔记

    Scott Meyers大师Effective三部曲:Effective C++.More Effective C++.Effective STL,这三本书出版已很多年,后来又出版了Effective ...

  10. Effective C++ 改善55个方法

    美·Scott Meyers 候捷 电子工业 2011 刚才看到个会议时间有点晚,3.25论文都提交了 谷歌去广告的插件, 最后投了这个会议,刚刚好正合适.我说金钱与时间 ACCUSTOMING YO ...

最新文章

  1. 一些安全相关的HTTP响应头
  2. 人工智能学习知识框架(知识点、实际应用)-思维导图汇总-xmind原图
  3. Intel Realsense D435 Tensorlfow-yolov3 测试摄像头识别坐标转换成实际空间坐标的准确程度
  4. 期待的程序员的生活并非你想象的那么简单!
  5. java下载zip_从Servlet Java下载zip
  6. echart 动画 饼图_echarts构建关系图,节点可收缩和展开,可添加点击事件
  7. 现代软件工程 第十七章 【人、绩效和职业道德】 练习与讨论
  8. php生成随机不重复的数字_PHP生成不重复随机数的几种方法
  9. 20 年前,微软怎样改变了我们鼠标的使用方式?| 极客头条
  10. .Net 让网页列表的前3条显示New图标
  11. Jquery第一章基础、过滤、层次选择器第二节1/2
  12. IIS安装前已经安装了.NET Framework,安装后如何启用.NETFramework
  13. DM9601 USB网卡驱动
  14. Mac spotlight无法搜索的解决方法
  15. linux18.04 英文文件夹,在Ubuntu 18.04 LTS中打开文件夹的6种方法
  16. 《Linux操作系统-系统移植》第12章 5G模组移植-第1节 中移物联5G移植(PPP拨号)
  17. Oracle 数据库表空间的管理
  18. EMI滤波器的matlab仿真,开关电源EMI滤波器的仿真设计
  19. 《Java语言程序设计与数据结构》编程练习答案(第四章)(二)
  20. ipad一代应用_通过下一代图像提高您的应用程序性能

热门文章

  1. 微服务,正确实施的SOA?
  2. 【HAVENT原创】NodeJS 短网址开发(调用第三方接口)
  3. 偏差、方差和噪声的权衡关系
  4. 新手学Docker(1)Hello World
  5. Android开发检测网络是否连接
  6. Urlrewritefilter使用说明
  7. 沈熙-JavaScript引擎原理及优化
  8. 6.高性能MySQL --- 查询性能优化(1)
  9. 17. jQuery - css() 方法
  10. 23. 变量、作用域和内存问题