【发布时间】:2014-05-25 01:14:01
【问题描述】:
我在 C++ 中看到了这个问题。
class A{
public:
char* getName(){ return "A";}
void showData(){
cout<<"A";
}
};
class B:public A{
public:
void showData(){
A::showData();
cout<<"B";
}
};
class C:public A{
public:
void ShowData(){
A::showData();
cout<<"C";
}
};
class D:public B,public C{
public:
void showData(){
B::showData();
C::showData();
cout<<"D";
}
};
问题1: D* d=新的 D(); d->显示数据(); // 我希望它打印“ABCD”,但它打印“ABACD”
问题2:
coutgetName(); // 它显示错误:'getName'的模糊访问
你能帮我解决两个问题吗? 谢谢。
【问题讨论】:
-
这不是有效的 C++ 代码。请发布可编译的代码。但是,如果您按照代码进行操作,您应该会看到为什么它会打印输出
ABACD -
cout<getName在您的 Problem2 中也无效。问题 1 准确地打印出它应该打印的内容:D 调用 B,它调用 A,它打印 A。然后 B 打印 B,然后 D 调用 C 调用 A,A 打印 A,然后 C 打印 C,然后 D 打印 D 。结果:ABACD,正是你要求它做的事情。 -
d调用getName方法,但是D继承了B和C,B和C都包含getName这个问题怎么解决?
-
@user1956702 我看到您没有接受任何问题的答案。如果答案对您有帮助,请单击旁边的小复选标记将其标记为“已接受”。这有助于贡献者更轻松地找到未回答的问题。谢谢!
标签: c++ inheritance overriding