虚继承的这个特性在C++的多重继承应用中可以起到很好的作用: 一个没有虚继承的多重继承: class A { void f() ; }; class B: public A { }; class C:public A { } class D: public B, public C { } void main() { D d; d.f(); } 这种情况下编译器会报错:D::f is ambiguous,could be the 'f' in base 'A' of base 'B' of class 'D',or the 'f' in base 'A' of base 'C' of class 'D' 很明显看出:d.f()是有歧义的,因为D中有2个A的copy,也就有2个A::f()函数,编译器不知道应该调用哪一个。
这个问题应用虚继承可以得到很好的解决,类定义重写如下: class A { void f() ; }; class B: public virtual A { }; class C:public virtual A { } class D: public B, public C { } void main() { D d; d.f(); } 此时D中只指向一个A对象,调用d.f(),就是调用那个唯一的A的f()函数,没有歧义,顺利执行。因为此时B和C都是指向同一个A对象。 此时D的结构如下图:
文章评论(0条评论)
登录后参与讨论