多继承存在什么问题?如何消除多继承中的二义性?
增加程序的复杂度,使得程序的编写和维护比较困难,容易出错;
在继承时,基类之间或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性,即同名二义性;
消除同名二义性的方法:
利用作用域运算符
::
,用于限定派生类使用的是哪个基类的成员;在派生类中定义同名成员,覆盖基类中的相关成员;
当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类的成员时,将产生另一种不确定性,即路径二义性;
消除路径二义性的方法:
消除同名二义性的两种方法都可以;
使用虚继承,使得不同路径继承来的同名成员在内存中只有一份拷贝。