突然了解到访问控制符不光能出现在类定义的成员前,还能出现在第二个位置(派生列表中),两种情况交织起来访问控制令人迷茫
所以写个博客梳理一下,总觉得这个继承关系跟现实生活中的人际关系其实差不多,所以拿老李一家三代人打个比方
出场人物如下:
老李:基类的内部成员函数
老李的财产:房屋、卧室、保险柜,基类成员,分别以public,protected,private修饰
李妈:老李的妻子,基类的友元
大李:派生类的成员函数
李婶:大李的妻子,派生类的友元
大王:大李的上司,派生类用户(用户是指编程中使用该类对象的人)
小李:派生类的派生类的成员函数
基类成员访问说明符
现在在不考虑派生访问说明符的情况下,对老李财产也就是基类成员访问情况如下:
祖辈财产 | 老李/李妈 | 大李/李婶 | 小李 | 大王 |
---|---|---|---|---|
房屋 | √ | √ | √ | √ |
卧室 | √ | √ | √ | |
保险柜 | √ |
也比较符合现实实际,妻子就相当于自己,所有东西都可以跟妻子共享,因为家业是俩人一起挣下的
儿子、孙子虽然亲,卧室随便进,但是也有点养老的东西不能让他们随便动
至于儿子上司这样的算是认识,客厅见
将名词转化一下,得到继承体系中不考虑派生访问说明符的访问情况
基类成员 | 基类成员/友元 | 派生类成员/友元 | 派生类的派生类 | 派生类用户 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
private | √ |
基类成员访问说明符+派生访问说明符
有一天呢,大李偶然撞见大王跟小李在合谋图老李的财产,很生气,就不准让他俩进入老李家,他的想法很简单,老李的房屋和卧室都归我继承,我把着门不准你们进入
大李: private 老李
这样一来我们跟别人介绍大李时就可以说, 他是老李的儿子,他从老李那继承的东西从不跟别人分享,连他儿子小李也不例外。
祖辈财产 | 老李/李妈 | 大李/李婶 | 小李 | 大王 |
---|---|---|---|---|
房屋 | √ | √ | ||
卧室 | √ | √ | ||
保险柜 | √ |
基类成员 | 基类成员/友元 | 派生类成员/友元 | 派生类的派生类 | 派生类用户 |
---|---|---|---|---|
public | √ | √ | ||
protected | √ | √ | ||
private | √ |
随着时间流逝,大李看儿子好像浪子回头洗心革面重新做人了,就打算收回成命,但是还不打算谅解上级,工作上虽然得听他使唤,但是私底下就得硬气点。
大李: protect 老李
祖辈财产 | 老李/李妈 | 大李/李婶 | 小李 | 大王 |
---|---|---|---|---|
房屋 | √ | √ | √ | |
卧室 | √ | √ | √ | |
保险柜 | √ |
基类成员 | 基类成员/友元 | 派生类成员/友元 | 派生类的派生类 | 派生类用户 |
---|---|---|---|---|
public | √ | √ | √ | |
protected | √ | √ | √ | |
private | √ |
最后,大李更老了,许多事也看开了,跟上级握手言和了。
大李: public 老李
祖辈财产 | 老李/李妈 | 大李/李婶 | 小李 | 大王 |
---|---|---|---|---|
房屋 | √ | √ | √ | √ |
卧室 | √ | √ | √ | |
保险柜 | √ |
基类成员 | 基类成员/友元 | 派生类成员/友元 | 派生类的派生类 | 派生类用户 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
private | √ |
由此,我们可以看出,基类内部成员的访问控制符仅仅能影响其直接派生类,而派生类的派生访问说明符影响其用户以及派生类的派生类
通俗讲,爷爷辈能决定留多少自己的东西给父辈,父辈能决定爷爷辈的东西留给多少给孙子以及他的上级领导(拍马屁用)。
重点笔记
- 在继承体系中,对于基类中继承成员的访问情况受到两个因素控制:
基类中的成员访问说明符; 派生类定义时的派生说明符;
前者影响 直接派生类内部成员方法 的访问情况,后者影响 自己(直接派生类)的用户 以及 派生类的派生类
2.友元与自己类的内部成员方法有同样的访问权限,但是友元关系不能继承