#include <iostream>
using namespace std;
class B
{
public:
int b;
private:
};
class B1 : public B
{
public:
int b1;
private:
};
class B2 : public B
{
public:
int b2;
private:
};
class C : public B1,public B2
{
public:
int c;
private:
};
int main()
{
C c1;
c1.b1 = 100;//正常
c1.b2 = 100;//正常
c1.b = 100;//报错,编译器不知道应该从B1类中得到B的成员还是从B2类中得到B的成员
system("pause");
return 0;
}
c1对象不能访问变量b,这就是多继承中的二义性
解决方法:添加virtual关键字(虚继承)。
#include <iostream>
using namespace std;
class B
{
public:
int b;
private:
};
class B1 : virtual public B
{
public:
int b1;
private:
};
class B2 : virtual public B
{
public:
int b2;
private:
};
class C : public B1,public B2
{
public:
int c;
private:
};
int main()
{
C c1;
c1.b1 = 100;//正常
c1.b2 = 100;//正常
c1.b = 100;
system("pause");
return 0;
}
但是如果没有B类只有B1、B2,那么virtual将不再起作用,所以多继承始终会出现问题,所以不建议使用多继承