1、继承性二义性问题
多个子类同时继承与同一个基类后,其派生类在访问基类成员时,会出现二义性问题,因为派生类无法选择继承路径。解决办法,通过使用虚拟继承可以解决这类二义性问题。
2、非继承性二义性问题
子类继承多个父类,并且这个多个父类具有相同命名的成员(只要名称相同,不区分函数参数或者成员类型);当子类调用父类相同命名成员时,会出现二义性问题,因为派生类不能区分调用哪个父类的成员。解决办法,通过使用指定父类名称可以解决这类二义性问题。
此二类二义性问题代码示例
继承性二义性代码示范:
#include <iostream>
using namespace std;
/**//*
继承关系说明:A是B和C的基类,B和C是D的基类
*/
class A
{
public:
int a;
};
class B:public A
{
public:
int b;
};
class C:public A