在C++继承中考虑这样一个关系:
B与C都是从相同的基类派生的,该基类称为A,然后D多重继承了B和C,因为B和C都包含了A的子对象。所以C包含了A的两个子对象。继承关系如下图
从继承图形状上看,有时该继承层次结构称为菱形。没有菱形时,多重继承相当简单。但是只要菱形一出现,由于新类中存在重叠的子对象。麻烦就开始了。重叠的子对象增加了存储空间。这种额外开销是否成为一个问题取决我们的设计,但是问题的关键是如何解决菱形继承带来的二义性。
用代码和编译器的抱怨来解释这个问题比较直观。
#include <iostream>
using namespace std;
class A
{
public:
A(int ax):a(ax)
{
}
void print_fuck()
{
cout<<"abc"<<endl;
}
private:
int a;
};
class B : public A
{
public:
B(int ax,int bx):A(ax),b(bx)
{
}
private:
int b;
};
class C : public A
{
public:
C(int ax,int cx):A(ax),c(cx)
{
}
private:
int c;
};
class D : public B, public C
{
public:
D(int ax,int bx,int cx, int dx):
B(ax,bx), C(ax,cx),d(dx)
{
}