问题描述:
类 A A A 派生出类 B B B ,类 C C C,然后类 B B B 与类 C C C 共同派生出类 D D D,问如何用一个类 A A A 的指针指向一个类 D D D 的对象
问题引入:
假如我们直接去写这个过程
下面是伪代码
class A{};
class B : public A {};
class C : public A {};
class D : public B , public C{};
int main()
{
D d;
A *str=&d;
}
这样写一定是错的,因为派生类
D
D
D 从 派生类
B
B
B 和派生类
C
C
C 中各获得了一份 派生类
A
A
A 的拷贝
这时候系统会提示你
[Error] ‘A’ is an ambiguous base of ‘D’ 对于
D
D
D 来说
A
A
A 是模糊的
问题解决
这时候我们用虚基类的知识去解决这个问题,我们要把基类设计成派生类的虚基类,同名成员被隐藏,就能解决我们的二义性问题;
class A{};
class B : virtual public A {};
class C : virtual public A {};
class D : public B , public C{};
int main()
{
D d;
A *str=&d;
}
// 5.18 更新
//这里一定要注意是在哪里+virtual 无论是虚基类还是虚函数,我们都要在重复的地方 + virtual ,要在重复拷贝的 A 基类前+virtual 而不是在 B C 派生D 的时候+virtual