1. 虚拟继承是为了防止菱形继承间接派生类含有多份虚基类成员数据
2. 虚拟继承虚基类的初始化应该由最底层的派生类显示负责
源代码:
// virtual_inherited.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
/************************************************************************/
/*
虚继承:
*/
/************************************************************************/
class Base
{
public:
Base(int a):a(a)
{
cout<<"Base()"<<endl;
}
void display()
{
cout<<"a = "<<a<<endl;
}
private:
int a;
};
class DerivedB:virtual public Base
{
public:
DerivedB(int a,int b):Base(a),b(b)
{
cout<<"DerivedB()"<<endl;
}
private:
int b;
};
class DerivedC:virtual public Base
{
public:
DerivedC(int a,int c):Base(a),c(c)
{
cout<<"DerivedC()"<<endl;
}
private:
int c;
};
class DerivedD:public DerivedC,public DerivedB //构造按继承顺序
{
public:
DerivedD(int a,int b,int c,int d):Base(d),DerivedB(a,b),DerivedC(a,c),d(d)
{
cout<<"DerivedD()"<<endl;
}
private:
int d;
};
void main()
{
DerivedD d(1,2,3,4);
d.Base::display();
}
运行结果:
Base()
DerivedC()
DerivedB()
DerivedD()
a = 4
请按任意键继续. . .