假设有四个类,A B C D
类A具有成员变量value,其中B和C都从A继承而来,而类D分别继承B和C,这样D就有了一个重名的成员变量value,
分别继承于B 和 C;
使用D类的成员变量value时就会产生二义性,程序出错。
(一)可以在使用D类value时指明其具体的作用域:D.A::value 或 D.B::value 或 D.C::value,
这样,D类的实例中就会有多个value的实例,占用内存空间。
(二)使用虚基类。在继承类时在前面加上 virtual
class A {
int value;
}
class B : virtual public A {
}
class C : virtual public A {
}
class D : public B, public C {
}
此时类D的实例中就只有一个value实例了,可以直接使用D.value。