继承模型
- 单继承: 一个派生类只有一个直接基类
- 多继承:一个派生类有两个或以上直接基类,(内存中的模型是,先继承的在前面,后继承的在后面,派生类的成员在最后)
- 菱形继承:容易造成数据冗余
虚继承
有了多继承就有可能存在菱形继承,可能造成成员的二义性
class A
{
public :
int _num;
};
class B : public A
{};
class C :public A
{};
class D :public B,public C
{};
int mian()
{
D d;
d._num = 2;
}
这是由于B和C中都有A中的_num,存在二义性
需要使用virtual关键字来实现虚继承
class A
{
public :
int _num;
};
class B : virtual public A
{};
class C :virtual public A
{};
class D :public B,public C
{};
int mian()
{
D d;
d._num = 2;
}