C++继承中的public/protected/private
今天杨老师讲到C++的继承的时候用一个表来说明子类继承父类后访问权限的变化,如下表:
注:在本类中,protected与private是相同的,但protected可以被继承,而private却不行。
一看还真不好理解。在网上一搜,找到了一篇能够很形象说明这个表的文章(链接 http://blog.sina.com.cn/s/blog_4a1f4666010096ur.html)
“说到public、protected和private三个修饰符,刚学C++时,被教教材上的那个表搞得晕晕忽忽的。曾几时为了考试还去背过那个表,现在想想真是哭笑不得。后来用得多了,就发现其实就是很简单的道理。
我们可以把一个类看作是一个人,类的数据成员看作是财产,而类的成员函数看作是对于财产的使用(包括花钱和挣钱)。
如果这个人很担心别人使用自己的财产,那就将其据为私有(private),这样只有自己才可以使用私有财产,就连自己的子孙也无缘享用;不管是儿子以何种方式继承的,都是幌子,老子什么也没给你留。
如果这个人还算大方点,有了将财产与子孙共享的想法,就将其保护(protected)起来,当然想法归想法,那还得看子孙们愿意不愿意继承这份财产了(一般是愿意的),如果儿子想独吞,即不想让财产再向自己的下一代传承,那他就将这部分保护的财产私有(private)继承下来,倘若儿子还想将其传承到自己的下一带甚至更远的子孙,那就保护(protected)继承或者公有(public)继承下来,这时的公有继承其实是个幌子,说的好听,但财产都保护起来了,公有继承和保护继承一个样,反正外人用不上;
如果这个人很大方,我的就是大家的,那就干脆财产宣布公有(public),这样自己可以用,外人也可以用,当然儿子也可以用。但是这终归是老子的想法,儿子没法管老子,但儿子如果小心眼儿,不想让别人甚至是自己的子孙从自己这里享用(私用继承),或者只想让自己子孙从自己这里拿钱享用(保护继承),当然这只是儿子小心眼罢了,其实财产不能从他这里拿出,从他父亲那里照样可以拿得出。如果儿子想通了,干脆也公有继承下来,这样就像他父亲那样慷慨了。
当然,以上所说的享用财产还有另一层意思,那就是使用后的情况,也就是说财产有进有出,和别人共享当然有挣有赔,不是说私有了就一定能赚大钱,而或许公有了挣得更多,只是说和别人共享后,就不是那么安全了!另外,如果管这个男人的人(一般是他老婆)很会打理,财产经过估量后,分情况对待,某些财产可以和别人一起使用,一起收益(public);某些财产是给子孙留的,只有自己和子孙一起使用,一起收益(protected);还有一部分财产是老两口子养老用的,自己使用(private)。至于儿子们是怎么继承的,那就看儿媳妇了,呵呵。其实程序员扮演的就是这里的老婆以及儿媳妇的角色。
当然这个人使用财产的方式也是类似的情况,可以和别人共享,也可以不是;可以传承,也可以不是。
总之,想和别人以及子孙共享,就公有;想和子孙共享,就保护;想自己使用,就私有。至于继承方式,那就看儿子的想法了,儿子能继承的部分也只有公有的和保护的,公有的那部分就完全教给儿子自己处理了,儿子想和别人以及子孙共享,就公有继承;想和子孙共享,就保护继承;想自己使用,就私有继承。继承的保护财产,儿子就没那么大的权利了,最多也就只能和自己的儿子共享(保护继承或公有继承),或者干脆自己使用(私有继承)。”
C++继承中的public/protected/private的更多相关文章
- c/c++ 继承与多态 继承中的public, protected, private
问题:类B私有继承类A,类A有个protected成员,那么在类B的成员函数里是否可以使用类A的protected成员? 可以使用. 估计有的同学说不对吧,类B都私有继承了类A了,怎么还能访问类A的p ...
- java中的public,protected,private权限修饰
public和private基本没问题,主要是默认的和protected之间的区别 同一包中默认的和protected一样,所以来看看不同包的情况 看下如下代码,两个类位于不同包: public cl ...
- C++中public,protected,private派生类继承问题和访问权限问题
C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...
- 【转载】C++中public,protected,private访问
第一:private, public, protected 访问标号的访问范围. 假如我们约定: 类内部-----指的是当前类类型的定义中,以及其成员函数的声明和定义中: 类外部-----指的是不在当 ...
- 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意
大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
- C++:继承访问属性(public/protected/private)
• 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: #include<iostream> using namespace std; class F ...
- JAVA修饰符类型(public,protected,private,friendly)
转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...
- C++ 类访问控制(public/protected/private)
第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protec ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
随机推荐
- 19 子线程刷新UI runOnUiThread
package com.example.com.fmyh; import java.io.BufferedReader; import java.io.File; import java.io.Fil ...
- 7.0、Android Studio命令行工具
命令行工具分成SDK工具和平台工具. SDK工具 SDK工具跟随SDK安装包安装并随时更新. Virtual Device 工具 1. Android Virtual Device Manager 提 ...
- 【Android应用开发】Android Studio - MAC 版 - 快捷键详解
博客地址 : http://blog.csdn.net/shulianghan/article/details/47321177 作者 : 韩曙亮 要点总结 : -- 熟练使用快捷键 : 在任何编程环 ...
- Android简易实战教程--第四话《最简单的短信发送器》
首先配置一个布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmln ...
- AsyncTask(异步任务)讲解-android的学习之旅(四十六)
AsyncTask简介 Android的UI线程主要处理用户的按键,触屏和View的绘制等,不能在里面处理耗时的操作,否则会出现ANR,因此耗时的操作要单独开一个线程处理,但是新线程不能直接处理UI线 ...
- Android的ImageSwitcher和TextSw-android学习之旅(三十四)
ImageSwitcher简介 ImageSwitcher继承了ViewSwitcher,所以在切换时候会有动画,可以把它理解成一个动画版本的ImageView. 他的showNext(),和show ...
- A*寻路算法入门(四)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...
- Tomcat如何检测内存泄漏
一般情况下,如果我们重启web应用是通过重启tomcat的话,则不存在内存泄漏问题.但如果不重启tomcat而对web应用进行重加载则可能会导致内存泄漏,因为重加载后有可能会导致原来的某些内存无法让G ...
- 1032. Sharing (25) -set运用
题目如下: To store English words, one method is to use linked lists and store a word letter by letter. T ...
- Ubuntu中firefox设置成中文
进入 http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly 按版本选择下去,帮助(help)-->关于,查看浏览器的版本号 所以,目录是3 ...