多重继续的二义性总结

1.多重继续的二义性,根本原因是

假如A有Test(),则B和C都有Test(),于是D产生了二义性

2.例1:


3.对例1稍作改变,结果又会不同

解释:

编译器通常都是从离自己最近的目录树向上搜索的

子类的Test()覆盖了基类的Test(),并不代表基类的Test()消失,只是不能直接访问

3.令B公有继承于A,以下函数都是公有

1)A有几个Test()的重载,B没有Test()

则:b.Test()调用A相应的重载

2)A有几个Test()的重载,B有Test()的重载1,没有Test()的重载2

则:b.hello()重载1,则调用B的相应重载

        b.hello()重载2,则出错

        b.A::hello(),则调用A的相应重载

4.对于单一继承,子类能否访问父类的父类,只与继承的方式有关

对于多重继承,子类不能直接访问父类的父类。
 

5.用virtual来避免二义性。

class B : virtual public A.

原文地址:https://www.cnblogs.com/windmissing/p/2559873.html