在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。
下面我们以菱形继承为例来演示构造函数的调用:
#include <iostream>using namespace std;//虚基类Aclass A{public:A(int a);protected:int m_a;};A::A(int a): m_a(a){ }//直接派生类Bclass B: virtual public A{public:B(int a, int b);public:void display();protected:int m_b;};B::B(int a, int b): A(a), m_b(b){ }void B::display(){cout<<"m_a="<<m_a<<", m_b="<<m_b<<endl;}//直接派生类Cclass C: virtual public A{public:C(int a, int c);public: