c++中的继承关系分为单继承和多继承
- 单继承:一个派生类只有一个基类
- 多继承:一个派生类不止有一个基类
在多继承的过程成容易造成二义性问题。
菱形继承是多继承中的一种复杂的情况。
菱形继承的有两个问题:
- 二义性:当使用A的数据时无法确定继承自B 还是 C
- 数据冗余:类D中会有两份类A的数据
先看一个菱形继承的例子
#include <iostream>
using namespace std;
class A{
public:
int _a = 1;
};
class B : public A{
public:
int _b = 2;
};
class C : public A{
public:
int _c = 3;
};
class D : public B, public C {
public:
int _d = 4;
};
int main(){
D d1;
//d1._a = 100;
d1.B::_a = 100; //可以显示的指定访问那一个类中的成员,解决了二义性问题
d1.C::_a = 101;
}