下面的代码有什么问题,解决方案是什么?
class A{
public:
int a;
};
class B: public A{
public;
int b;
};
class C:public A,public B{
};
答:
上面的代码对于中C所继承的B也继承了A。事实上就是重复继承。对于编译器来说,上面的定义可以通过。但是,下面的代码却会报错。
C test;
test.a = 10;//包编译错,因为a不知道是c第一个父类的变量,还是第二个的变量。
解决方案:
class A{
int a;
};
class B: public virtual A{
int b;
};
class C:public virtual A,public B{
};