C++多继承二义性问题(菱形继承问题)
这是多继承二义性问题的另一个常见问题,叫菱形问题。简单来说是,祖类为A,父类为B和C,子类为D,当我们想调用祖类A的成员时,编译器出现歧义的编译错误。
解决方法:
对父类进行虚继承祖类,看如下代码:
#include<iostream>
using namespace std;
class A{
public:
void print(void);
};
//父类B虚继承祖类A
class B:virtual public A{
};
//父类C虚继承祖类A
class C:virtual public A{
};
class D:public B, public C{
};
void A::print()
{
cout << "A print" << endl;
}
int main()
{
D d;
// 父类虚继承后,调用祖类A的成员时就不会出现歧义现象
d.print();
return 0;
}