虚拟继承
Day7-3 C++ 中的虚拟继承详解
一、为什么虚拟继承能解决存储二义性?
1. 问题的根源:菱形继承
假设存在以下继承关系:
class A {
public: int x; };
class B : public A {
};
class C : public A {
};
class D : public B, public C {
};
问题1:数据冗余
D
通过 B
和 C
间接继承了两次 A
,导致 D
对象中包含两份 A
的成员(B::A::x
和 C::A::x
)。
问题2:访问二义性
当直接访问 D
中的 x
时,编译器无法确定是通过 B
还是 C
路径继承的 x
,导致编译错误: