多继承存在什么问题?如何消除多继承中的二义性?

  1. 增加程序的复杂度,使得程序的编写和维护比较困难,容易出错;

  2. 在继承时,基类之间或基类与派生类之间发生成员同名时,将出现对成员访问的不确定性,即同名二义性;

    消除同名二义性的方法:

  • 利用作用域运算符::,用于限定派生类使用的是哪个基类的成员;
  • 在派生类中定义同名成员,覆盖基类中的相关成员;
  1. 当派生类从多个基类派生,而这些基类又从同一个基类派生,则在访问此共同基类的成员时,将产生另一种不确定性,即路径二义性;

    消除路径二义性的方法:

  • 消除同名二义性的两种方法都可以;
  • 使用虚继承,使得不同路径继承来的同名成员在内存中只有一份拷贝。

发表评论

后才能评论