1. 派生类的声明
声明一个派生类的一般格式为:
1 | Class 派生类名:[继承方式] 基类名{ |
如果不显示地给出继承方式关键字,系统默认为私有继承(private)。
2. 基类成员在派生类中的访问属性
派生类可以继承基类中除了构造函数与析构函数之外的成员,但是这些成员的访问属性在派生过程中是可以调整的。从基类继承来的成员在派生类中的访问属性是由继承方式控制的。
基类中的成员 | 在公有派生类中的访问属性 | 在私有派生类中的访问属性 | 在保护派生类中的访问属性 |
---|---|---|---|
私有成员 | 不可直接访问 | 不可直接访问 | 不可直接访问 |
公有成员 | 公有 | 私有 | 保护 |
保护成员 | 保护 | 私有 | 保护 |
从上表中可以归纳出以下几点:
(1)基类中的私有成员
无论哪种继承方式,基类中的私有成员不允许派生类继承,即在派生类中是不可直接访问的。
(2)基类中的公有成员
当类的继承方式为公有继承时,基类中的所有公有成员在派生类中仍以公有成员的身份出现。
当类的继承方式为私有继承时,基类中的所有公有成员在派生类中仍以私有成员的身份出现。
当类的继承方式为保护继承时,基类中的所有公有成员在派生类中仍以保护成员的身份出现。
(3)基类中的保护成员
当类的继承方式为公有继承时,基类中的所有保护成员在派生类中仍以保护成员的身份出现。
当类的继承方式为私有继承时,基类中的所有保护成员在派生类中仍以私有成员的身份出现。
当类的继承方式为保护继承时,基类中的所有保护成员在派生类中仍以保护成员的身份出现。
3. 派生类对基类成员的访问规则
派生类对基类成员的访问形式主要有以下两种:
(1)内部访问。由派生类中新增的成员函数对基类继承来的成员的访问
(2)对象访问。由派生类外部,通过派生类的对象对从基类继承来的成员的访问。
3.1 私有继承的访问规则
基类中的成员 | 私有成员 | 公有成员 | 保护成员 |
---|---|---|---|
内部访问 | 不可访问 | 可访问 | 可访问 |
对象访问 | 不可访问 | 不可访问 | 不可访问 |
说明:
(1)基类中的私有成员在被私有继承时既不能被派生类的对象访问,也不能被派生类的成员函数访问,只能被基类自己的成员函数访问。因此,我们在设计积累时,总要为它的私有数据成员提供公有成员函数,如成员函数showx等,以便使派生类可以间接访问这些数据成员。
(2)经历了私有继承之后,所有基类的成员都成为了派生类的私有成员或不可直接访问的成员,如果进一步派生的话,基类的全部成员都无法在新的派生类中被访问。
3.2 公有继承的访问规则
基类中的成员 | 私有成员 | 公有成员 | 保护成员 |
---|---|---|---|
内部访问 | 不可访问 | 可访问 | 可访问 |
对象访问 | 不可访问 | 可访问 | 不可访问 |
3.3 保护继承的访问规则
基类中的成员 | 私有成员 | 公有成员 | 保护成员 |
---|---|---|---|
内部访问 | 不可访问 | 可访问 | 可访问 |
对象访问 | 不可访问 | 不可访问 | 不可访问 |