【转】 派生类不同的继承方式

本文详细解释了在公有继承、私有继承和保护继承三种继承方式下,基类成员在派生类中的访问属性如何变化。包括公有继承下成员的直接访问,私有继承下成员的私有化以及保护继承下成员的保护性访问。同时,讨论了继承方式对后续派生类的影响。

派生类继承和吸收了基类的全部数据成员和除了构造函数、析构函数之外的全部函数成员,但这些成员在派生类中的访问属性是可以调整的,这是由派生类定义格式中的继承方式来决定的,也就是继承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。

由于继承方式可以有publicprivateprotected三种,不同的继承方式会导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这种访问包括两个方面:一是派生类中新增成员对从基类继承来的成员的访问;二是派生类的外部通过派生类的对象从基类继承来的成员的访问。

1)公有继承

当类的继承方式为公有继承时,基类中publicprotected成员的访问属性在派生类中不变,而基类private成员不可访问。也就是说,基类的publicprotected成员在公有继承方式下分别继承为派生类的publicprotected成员,派生类中的其他成员可以直接访问它们,在派生类的外部只能通过派生类的对象访问从基类继承来的public成员。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。

    所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。

2)私有继承

当类的继承方式为私有继承时,基类中的publicprotected成员都以private成员出现在派生类中,而基类private成员不可访问。也就是说,基类的publicprotected成员在私有继承方式下被继承为派生类的private成员,派生类中的其他成员可以直接访问它们,但在派生类的外部无法通过派生类的对象访问它们。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。

可以看出,经过私有继承后,所有基类的成员都成为派生类的私有成员,如果进一步派生的话,基类的成员就无法在新的派生类中被访问。因此,经过私有继承后,基类的成员再也无法在以后的派生类中发挥作用,实际是相当于中止了基类功能的继续派生。

    所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

3)保护方式

当类的继承方式为保护继承时,基类中的publicprotected成员都以protected成员出现在派生类中,而基类private成员不可访问。也就是说,基类的publicprotected成员在保护继承方式下被继承为派生类的protected成员,派生类中的其他成员可以直接访问它们,但在派生类的外部无法通过派生类的对象访问它们。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。

所以,在保护继承时,基类的成员也只能由直接派生类访问,而无法再往下继承。

比较私有继承和保护继承,可以看出实际上直接派生类中,所有成员的访问属性都是完全相同的。但是,如果派生类作为新的基类继续派生时,二者的区别就出现了。

 

上面内容部分转自博客 http://blog.chinaunix.net/uid-21411227-id-1826860.html

转载于:https://www.cnblogs.com/liangweixin/p/5027210.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值