文档介绍:大学计算机应用基础
第8章 C++类的继承与派生
8.1.1类的继承与派生
一 类的继承与派生的基本概念
一个派生类可以由一个基类派生,也可以由多个基类派生而来。有一个基类派生的继承称为单继承,由多个基类派生的继承称为多继承。
8ic和protected成员在私有继承方式下被继承为派生类的private成员,派生类中的其他成员可以直接访问它们,但在派生类的外部无法通过派生类的对象访问它们。而无论是派生类的成员还是派生类的对象都无法访问从基类继承来的private成员。
,但派生类已经通过自己的成员函数实现了对其的访问,保持了基类的封装性。因此与保护继承的访问方式相同。
,对基类成员在派生类中的访问权限可以用表8—1概括。
表8—1 基类成员在派生类中的访问权限
基类中的成员
公有继承下的访问属性
私有继承下的访问属性
保护继承下的访问属性
公有成员
公有
私有
保护
私有成员
不可访问
不可访问
不可访问
保护成员
保护
私有
保护
派生类的构造函数和析构函数
,那么在派生类中,如果对派生类新增的数据成员进行初始化,就必须在派生类中根据需要加入新的构造函数;如果对从基类继承下来的成员进行初始化,就必须由基类的构造函数来完成。所以派生类的构造函数不仅要负责新增数据成员的初始化,还要负责调用基类的构造函数并对基类的构造函数所需要的参数进行必要的设置以完成
对基类成员的初始化。
派生类的构造函数
派生类名::构造函数名(参数表):基类名(参数表),内嵌对象1(参数表1),内嵌对象2(参数表2),…,常量1(初值1),常量2(初值2),…,引用1(变量1),引用2(变量2)…
{
派生类构造函数体
}
以上定义格式中,派生类构造函数名后面括号内的参数表中包括参数的类型和参数名,而基类构造函数名后面括号内的参数表中只有参数名而没有参数类型,并且这些参数必须是来源于派生类构造函数名后面括号内的参数。
(P238)
(1) 从程序运行结果可以看出,在创建派生类对象B1时,先调用了基类的构造函数建立基类对象并通过默认值初始化数据成员a1,a2,a3为0,然后调用派生类的构造函数建立派生类对象B1,并初始化派生类数据成员b1为4,从而完成派生类对象的创建。
(2)从运行结果可以看出,由于派生类继承了基类的数据成员a1,a2,a3,而基类的构造函数不被继承,因此对这三个数据成员的初始化需通过调用基类的构造函数来实现。
(3).对于派生类对象的创建,基类和派生类的构造函数调用过程如下:
调用基类的构造函数。
按照数据成员(包括内嵌对象,常量,引用等必须初始化的成员)的声明顺序,依依次调用数据成员的构造函数或初始化数据成员。
执行派生类构造函数的函数体。
注意:构造函数的执行顺序只与成员声明的顺序有关,而与初始化表中各项的排列顺序无关。常成员,引用成员,内嵌对象,只能通过初始化表的方法初始化。
(1)派生