在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。

下面我们以菱形继承为例来演示构造函数的调用:
- #include
- using namespace std;
- //虚基类A
- class A{
- public:
- A(int a);
- protected:
- int m_a;
- };
- A::A(int a): m_a(a){ }
- //直接派生类B
- class 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_b="< - }
- //直接派生类C
- class C: virtual public A{
- public:
- C(int a, int c);
- public: