#include
using namespace std;
class A{
public:
void test(){ cout<< "TestA"<<endl;}
};
class B:public A{
public:
void test(){ cout<< "TestB"<<endl;}
};
class C:public A{
public:
void test(){ cout<< "TestC"<<endl;}
};
class D: public B, public C{
public:
void test(){ cout<< "TestD"<<endl;}
};
int main(){
D qwe;
qwe.C::A::test();//这个地方DEVC++提示我A不明确,语法过不了
return 0;
}
请问一下怎么才能输出TESTA。
B继承A
C继承A
D继承B,C
D中有两份A的成员,因此报错。
解决办法是加上virtual关键字,如下:
class B :virtual public A {
class C :virtual public A {
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!
楼上所说的虚基类当然能解决所说的情况,但是如果我本身想要在D中保存两个A的副本呢?
这样继承本身是没有问题的,只是在调用的时候,无法针对特定的副本进行调用。如果BC中没有定义test,那么可以 B::test(或者C::test()去针对特定副本调用。
想请问下,这种情况下的继承怎么处理?
不是应该是
A* a = new B(); 调用则是B的
A* a = new C(); 调用C.
而不是定义D类型