今天呢,我们来讲讲菱形继承与虚继承。这两者的讲解是分不开的,要想深入了解菱形继承,你是绕不开虚继承这一点的。它俩有着什么关系呢?值得我们来剖析。
菱形继承也叫钻石继承,它是多继承的一种特殊实例吧,它的基本架构如下图:
在我们的设想中,D所对应的对象模型应该如下图所示:
下面我们来用一段代码验证一下:
class A
{
public:
A()
{
cout << "A()" << endl;
}
~A()
{
cout << "~A()" << endl;
}
char a;
};
class B :public A
{
public:
B()
{
cout << "B()" << endl;
}
~B()
{
cout << "~B()" << endl;
}
char b;
};
class C :public A
{
public:
C()
{
cout << "C()" << endl;
}
~C()
{
cout << "~C()" << endl;
}
int c;
};
class D :public B, public C
{
public:
D()
{
cout << "D()" << endl;
}
~D()
{
cout << "~D()" << endl;
}