C++学习笔记(二.继承成员的访问控制)

突然了解到访问控制符不光能出现在类定义的成员前,还能出现在第二个位置(派生列表中),两种情况交织起来访问控制令人迷茫
所以写个博客梳理一下,总觉得这个继承关系跟现实生活中的人际关系其实差不多,所以拿老李一家三代人打个比方
出场人物如下:
老李:基类的内部成员函数
老李的财产:房屋、卧室、保险柜,基类成员,分别以public,protected,private修饰
李妈:老李的妻子,基类的友元
大李:派生类的成员函数
李婶:大李的妻子,派生类的友元
大王:大李的上司,派生类用户(用户是指编程中使用该类对象的人)
小李:派生类的派生类的成员函数

基类成员访问说明符

现在在不考虑派生访问说明符的情况下,对老李财产也就是基类成员访问情况如下:

祖辈财产 老李/李妈 大李/李婶 小李 大王
房屋
卧室
保险柜

也比较符合现实实际,妻子就相当于自己,所有东西都可以跟妻子共享,因为家业是俩人一起挣下的
儿子、孙子虽然亲,卧室随便进,但是也有点养老的东西不能让他们随便动
至于儿子上司这样的算是认识,客厅见

将名词转化一下,得到继承体系中不考虑派生访问说明符的访问情况

基类成员 基类成员/友元 派生类成员/友元 派生类的派生类 派生类用户
public
protected
private

基类成员访问说明符+派生访问说明符

有一天呢,大李偶然撞见大王跟小李在合谋图老李的财产,很生气,就不准让他俩进入老李家,他的想法很简单,老李的房屋和卧室都归我继承,我把着门不准你们进入
大李: private 老李
这样一来我们跟别人介绍大李时就可以说, 他是老李的儿子,他从老李那继承的东西从不跟别人分享,连他儿子小李也不例外。

祖辈财产 老李/李妈 大李/李婶 小李 大王
房屋
卧室
保险柜
基类成员 基类成员/友元 派生类成员/友元 派生类的派生类 派生类用户
public
protected
private

随着时间流逝,大李看儿子好像浪子回头洗心革面重新做人了,就打算收回成命,但是还不打算谅解上级,工作上虽然得听他使唤,但是私底下就得硬气点。
大李: protect 老李

祖辈财产 老李/李妈 大李/李婶 小李 大王
房屋
卧室
保险柜
基类成员 基类成员/友元 派生类成员/友元 派生类的派生类 派生类用户
public
protected
private

最后,大李更老了,许多事也看开了,跟上级握手言和了。
大李: public 老李

祖辈财产 老李/李妈 大李/李婶 小李 大王
房屋
卧室
保险柜
基类成员 基类成员/友元 派生类成员/友元 派生类的派生类 派生类用户
public
protected
private

由此,我们可以看出,基类内部成员的访问控制符仅仅能影响其直接派生类,而派生类的派生访问说明符影响其用户以及派生类的派生类
通俗讲,爷爷辈能决定留多少自己的东西给父辈,父辈能决定爷爷辈的东西留给多少给孙子以及他的上级领导(拍马屁用)。

重点笔记

  1. 在继承体系中,对于基类中继承成员的访问情况受到两个因素控制:
    基类中的成员访问说明符; 派生类定义时的派生说明符;
    前者影响 直接派生类内部成员方法 的访问情况,后者影响 自己(直接派生类)的用户 以及 派生类的派生类

2.友元与自己类的内部成员方法有同样的访问权限,但是友元关系不能继承

发布了18 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_33500066/article/details/103926114
今日推荐