虚基类 :
如果某个派生类的部分或全部直接基类是从另一个共同的基类派生而来,在这些基类中,从上一级基类继承来的成员就有相同的名称,则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性,此时,可定义虚基类。这就要求在其直接基类的定义中,使用关键字 virtual 将那个共同的基类定义为虚基类,其语法形式如下:
class 派生类名: virtual 派生方式 基类
1) 在同一层次中 , 先调用虚基类的构造函数,接下来依次是非虚基类的构造函数,对象成员的构造函数,派生类的构造函数。
2) 若同一层次中包含多个虚基类,这些虚基类的构造函数按对他们说明的先后次序调用
3) 若虚基类由非虚基类派生而来,则仍然先调用基类构造函数,再调用派生类构造函数。
如果类继承中包括多个虚基类的实例,基类只被初始化一次。
1、如果类里面有成员类,成员类的构造函数优先被调用; 2、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类); 3、 基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的 |
总结:虚继承和非虚继承,先虚继承。先调基类构造函数,同级情况按继承顺序表从左往右构造。
若定义了带参数的构造函数,编译器不再构造无参默认构造。