先定义两个概念
单继承:一个子类只有一个直接父类时候称之为单继承
多继承:一个子类有两个或者两个以上的父类时候称之为多继承
显然易见,菱形继承顾名思义当然是在继承上有一个菱形的传递关系。
- 菱形继承的问题:从上面对象中可以发现他的问题,数据沉(去点三点水旁)余和二义性问题。我们的菱形最顶下成员继承的元素可以来子drival1,也可以来子drival2.
我们无法确认访问name是来自drival1还是drival2
如果是定义访问函数区间虽然可以解决二义性但是沉余问题还是解决不了的。怎么办了?
我们需要一个虚函数virtual,本质上我感觉是引入了一个指针函数确定那种指向关系。
class A{
public:
int _a;
};
class B :virtual public A
{
public:
int _b;
};
class C : virtual public A
{
public:
int _c;
};
class D : public B, public C
{
public:
int _d;
};
int main() {
D d;
d.B::_a = 1;
d.C::_a = 2;
d._b = 3;
d._c = 4;
d._d = 5;
return 0;
}
好了,就这样吧,我知道我们写的估计比较简单没有写虚表,但是我们感觉c++中很多关键字都是可以类比指针的,感觉是指针的一层封装不知道,这样想对不对,但是类比过程,思维过程推理倒是没有什么问题。