求助,在这个继承中如何输出TESTA

#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。

3个回答

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()去针对特定副本调用。
想请问下,这种情况下的继承怎么处理?

GoldenBullet
流星之愿 回复战在春秋: 第一次用论坛,没发现评论功能不好意思哈。我最初本意就是想问这层楼的两个A副本的继承情况下如何调用,题干程序需求也本身就是这样,不能改啊,如果单纯想要搞出TESTA,我直接删掉C或者删掉B类也行啊,加了virtual其实相当于删掉一个子类了。就是想请教一下这种情况,我采纳你。
2 年多之前 回复
fight_in_dl
战在春秋 如果有别的问题,可以另开一个问题,这个题目可以结题吗?
2 年多之前 回复
fight_in_dl
战在春秋 现在这种情况,估计是不会采纳了,又白答了一个题目,心情很不好.......。
2 年多之前 回复
fight_in_dl
战在春秋 如果你已经知道了这个办法,在题目中先说明一下就好了,因为论坛有采纳率的要求,这样我就可以考虑一下怎么回答更好。
2 年多之前 回复
fight_in_dl
战在春秋 题目中问: 请问一下怎么才能输出TESTA? 我的答案应该是已经回答了这个问题。
2 年多之前 回复

不是应该是
A* a = new B(); 调用则是B的
A* a = new C(); 调用C.
而不是定义D类型

GoldenBullet
流星之愿 这里只用了简单的继承,没有搞多态。。。。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问