C++中,子类为什么不能访问基类的private数据?

 
 
emmm  来自一个vegetable dog的疑问:
 
首先基类可以通过调用自身public成员函数来访问private

而子类又可以调用基类public成员函数。

那子类就可以间接访问基类private数据啊,有什么不对么 ??

 
 

解释:

通常情况下,基类可能不是你写的,那么你只是基类的用户。因此你去编写一个此基类的派生类时你应该只具有基类的使用权,而无权去修改它。此时对你来说,基类的一切实现都是不可见的,无论基类有什么样的Private成员和方法,都与你无关,那是它自己内部的实现细节。你作为基类的用户——此时你只是使用了基类提供的Public成员,所以是“用户”——也无需关心基类的Private细节。既然是“Private”,干嘛还去关心呢?那叫“窥探隐私”。

之所以规定子类无权访问基类的Private成员说白了就是为了保护基类的实现和使用不受破坏。试想,如果子类有权访问基类的Private成员,那么任何用户都可以通过一个简简单单的继承,就能读写某类的Private了,那么Private还有什么意思呢?

另外,对于代码来说,“用户”实际上就是程序员。

总结:

之前在书上看类的例题时 总感觉有一些代码很多余 删去了对测试结果也没有影响 但这只是因为我们被带入的数据思维定势了。

虽然只是一个很基础的问题 但对我这种vegetable dog的影响还是挺大的 虽然我们现在只是刚刚入门编程,但我们应该把眼光放长远一点~

 
 

最新文章

  1. luogg_java学习_07_抽象类_接口_多态学习总结
  2. [C++] socket - 2 [UDP通信C/S实例]
  3. 20141015--for语句2
  4. hadoop可能遇到的问题
  5. Combination Sum —— LeetCode
  6. (转) Name visibility
  7. Glib程序使用Valgrind查找内存泄露
  8. Collection用法
  9. JS实现图片不间断滚动
  10. java定时器schedule和scheduleAtFixedRate区别
  11. U813.0操作员功能权限和数据权限的设置
  12. 关于clone(java.lang.Object)重写
  13. VUE错误码Attribute ':sizeOpts' must be hyphenated
  14. shell变量的截取总结
  15. python tcp .demo
  16. 【校招面试 之 剑指offer】第11题 旋转数组中的最小数字
  17. Ajax异步请求阻塞情况的解决办法
  18. WinPE ISO制作
  19. HTML5框架、背景和实体
  20. 使用System.Data.SQLite及其EF模块操作SQLite数据库(文件)

热门文章

  1. Java基础(十)
  2. MHA搭建
  3. 多模块环境下修改包名Rename directory与Rename package
  4. C++练习 | 类的继承与派生练习(1)
  5. 测试必知150个常用Linux命令,已为各位筛选整理
  6. Java 类的构造器中this()和super()的困惑
  7. [转载]C++STL概述
  8. qt treaview项checkbox样式
  9. 为什么angular library的build不能将assets静态资源打包进去(转)
  10. 测试Random类nextInt()方法连续两次结果一样的概率