【c/c++】继承的访问控制

派生类继承了基类中除了构造函数和析构函数之外的所有成员,派生类不能选择继承一部分而舍弃另外一部分成员。对于从基类继承而来的在派生类中没有用的成员,可以通过指定继承方式,使这些成员在派生类中成为不可访问的,从而减少数据冗余和增加数据的安全性。

不同的继承方式决定的不同访问控制权限体现在:

(1)派生类的成员函数对所继承的基类成员的访问控制

(2)类外面通过派生类对象对其所继承基类成员的访问控制 

综述:

首先,不同的继承方式,不影响派生类的成员函数对从基类继承的成员访问,即派生类的成员函数不能直接访问基类私有成员,可以直接访问基类的保护成员和公有成员。

其次,不同的继承方式,对类外的其他函数通过派生类对象访问从基类继承的公有成员,有不同的影响:只有公有继承方式的时候,通过派生对象可以访问从基类继承的公有成员,其他继承方式下,不能访问从基类继承的任何成员。

最后,在不同的继承方式下面,基类成员被继承到派生类后,访问的属性有不同的变化。具体如下表:


按照上面的解释:

B从A类中以哪种方式继承下来,对于C(想要继承B)的类来说,是有些影响的。例如B以private的方式继承A,那么就算C以public的继承B,原先A中的基类成员变成了private,那岂不是C就不能访问了?归根就是说对父类在间接子类中的访问权限问题。

这个问题在下面的实例得到验证,也就说两层的继承看不到区别,但是在三层以及更多层的继承中继承方式对结果影响就大了

实例:



需要说明:

第一点:三层继承结构private就不用说了,在base01以private继承了base,其里面的public和protected的成员都变成了private,没那么在deriver的成员函数就不用想再去访问基类base中的原本是protected和public的成员了。记住继承类的成员函数只能访问上一级父类(不是所有父类,要看之前的继承方式是否改变了之前父类访问属性)的保护成员和公有成员

第二点:

像之前学习过的知识,想要访问某个类的private成员,只有两种方法,第一种就是成为其的友元函数;第二种方法,就是期望其类本身开放了private的接口,常见的就是set和get函数接口

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值