#include <iostream>
using namespace std;
class A
{
public:
int a;
};
class A1: public A
{
};
class A2: public A1
{
};
class B1: public A
{
};
class B2: public B1
{
};
class C:public A2,public B2
{
};
int main()
{
C e1;
e1.a=3;
cout<<e1.a<<endl;
}
以上程序想实现以下继承关系
程序编译时出错,error C2385: 'C::a' is ambiguous
(1)解决方式:使用虚基类, 将公共基类设为虚基类
注意 virtual
#include <iostream>
using namespace std;
class A
{
public:
int a;
};
class A1: virtual public A //将A设为虚基类
{
};
class A2: public A1
{
};
class B1: virtual public A //将A设为虚基类
{
};
class B2: public B1
{
};
class C:public A2,public B2
{
};
int main()
{
C e1;
e1.a=3;
cout<<e1.a<<endl;
}
编译成功
(2)注意如果改变virtual 的位置,仍编译出错
#include <iostream>
using namespace std;
class A
{
public:
int a;
};
class A1: public A
{
};
class A2: virtual public A1 //将A1设为虚基类
{
};
class B1: public A
{
};
class B2: virtual public B1 //将B1设为虚基类
{
};
class C:public A2,public B2
{
};
int main()
{
C e1;
e1.a=3;
cout<<e1.a<<endl;
}
程序编译时出错,error C2385: 'C::a' is ambiguous