首页 理论教育保护继承的特点和区别

保护继承的特点和区别

【摘要】:当类的继承方式为保护继承时,基类public和protected成员都以protected权限出现在派生类中,而基类private成员不可访问。比较私有继承和保护继承可以看出,实际上在直接派生类中,所有成员的访问属性都是完全相同的。B类再派生出C类后,A类中的公有和保护成员被C类间接继承后,有可能是保护的或者是私有的。程序的执行结果与例6.1的相同。

当类的继承方式为保护继承时,基类public和protected成员都以protected权限出现在派生类中,而基类private成员不可访问。即基类的public和protected成员被继承以后作为派生类的保护成员,这样,派生类的其他成员就可以直接访问它们,但在类外部通过派生类的对象无法访问。无论是派生类的成员还是派生类的对象都无法访问基类的private成员。

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

假设B类以私有方式继承了A类后,B类又派生出C类,那么C类的成员和对象都不能访问间接从A类中继承来的成员。如果B类是以保护方式继承了A类,那么A类中的公有和保护成员在B类中都是保护成员。B类再派生出C类后,A类中的公有和保护成员被C类间接继承后,有可能是保护的或者是私有的(视从B到C的派生方式不同而异)。因而,C类的成员有可能可以访问间接从A类中继承来的成员。

【例6.3】分析以下程序的执行结果。(www.chuimin.cn)

解:上述程序中,基类A中声明了一个数据成员x,它为protected访问权限。类B是从类A派生的(属单继承的情况),其继承方式为protected,因此在派生类B中,存在如下数据成员:x具有protected权限,y具有private权限,z具有protected权限,m具有public权限,如图6.6所示。程序的执行结果与例6.1的相同。

图6.6 由类A派生类B