C++的继承中有一种复杂的继承方式,这就是菱形继承。
菱形继承
(1)什么是菱形继承?
假设现在有四个类,分别是A、B、C、D四个类。如果B类和C类同时继承于A类,并且D类又同时继承于B类和C类,那么这四个类之间的关系就叫做菱形继承。可以用下面的图来表示。
(2)菱形继承的问题
菱形继承会存在两个问题,一个是数据冗余,另外一个是二义性。
我用一段简单的代码来说明这两个问题:
class A
{
public:
int a;
};
class B:public A
{
public:
int b;
};
class C:public A
{
public:
int c;
};
class D:public B,public C
{
public:
int d;
};
1. 为什么说会存在数据冗余?
首先B类和C类都继承了A类,所以B类和C类中都一定包含A类的成员变量a,也就是说B类中有一个int a,同样C类中也有一个int a。那么当D类继承B类和C类后,那么在D类中一定包含两个int a,其中一个来自B类,另外一个来自C类。这就是所谓的数据冗余。