多继承和虚基类
多继承的定义
多继承中构造函数的定义及其调用
虚基类的概念
虚基类的定义主要内容多继承 人黄种人中国人 韩国人 日本人越南人
单继承派生类只有一个基类!
多继承继承人学生 教师助教派生类,助教,有多个基类!
多继承的定义
class <派生类名 >:<继承方式 > <基类名 1>,…,<继承方式 > <基类名 n>
{
<派生类新定义成员 >
};
定义格式例,根据图示完成类 A,B,C的定义
a b
c
A B
C
c
b
aC
多继承的构造函数
<派生类名 >(<总参数表 >):<基类名 1>(<参数表 1>),…,< 基类名 n> (<
参数表 n>)
{
<派生类数据成员的初始化 >
};
多继承方式下构造函数的调用顺序:
1) 按照基类在派生类 定义中 出现的 顺序调用 所有 基类的构造函数;
2) 若存在对象,调用对象的构造函数;
3) 调用派生类自身的构造函数;
例 1,写出 C的构造函数,并说明构造函数的调用顺序。
a b
c
A B
C
例 2,示例多继承方式下构造函数和析构函数的调用顺序。
C(int i,int j,int k):A(i),B(j) //还可以写为 ……
{
}
c = k;
class C,public B,public A
{
};
int c;
调用顺序,B----A-----C //与初始化成员列表无关!!
虚基类人学生 教师助教研究生
name
insert_name
id
insert_id
print
dn
insert_dn
salary
insert_salary
print
print
思考助教类中有哪些类成员?
name
insert_name
name
insert_name
id
insert_id
print
……
insert_name
继承的二义性出现这种问题的原因是什么?
虚基类
解决继承二义性问题:
部分或全部直接基类具有相同的父类人学生 教师助教研究生虚基类
定义格式
class <派生类名 >:virtual <继承方式 > <共同基类名 >
例 3 示例虚基类的应用引入虚基类后构造函数的调用顺序:
同一层次中,先调用虚基类的构造函数;
不同层次中,还是先调用基类构造函数再调用派生类构造函数;
同一层次中,若存在多个虚基类,则按照派生类中的定义顺序调用其构造函数;
例 4 示例虚基类引入后构造函数调用顺序
Base2 Base2 Base1
Level1 Level2
TopLevel
虚虚