虚基类

虚基类
当一个类被虚拟继承时,基类才叫虚基类。

初始化
在多层的继承关系中,虚基类的初始化是由最终派生类完成的。中间派生类对虚基类构造函数的调用被抑制。
class  Base
{
public:
    Base(
int i){cout<<"Base: "<<i<<endl;}
}
;

// virtual inheritance
class  Base1:  public   virtual  Base
{
public:
    Base1(
int,int):Base(3){}    //Base(3) not called
}
;


class  Derived :  public  Base1
{
public:
    Derived():Base(
4),Base1(2,3){}    //Base(4) called
}
;
输出:Base: 4

在非虚拟继承时,派生类只能显示初始化其直接基类。
class  Base
{
public:
    Base(
int i){cout<<"Base: "<<i<<endl;}
}
;

class  Base1:  public  Base
{
public:
    Base1(
int,int):Base(3){}    
}
;


class  Derived :  public  Base1
{
public:
    Derived():Base1(
2,3){}    //can't call Base() here
}
;

构造函数的调用:
按照继承时基类的声明顺序,依次查找虚基类,调用虚基类构造函数;
虚基类构造完后,依次构造非虚基类;
最后调用派生类构造函数。


 

你可能感兴趣的:(虚基类)