假设我有这个简单的代码
#include <iostream>
using namespace std;
class A {
public:
void show() {
cout << "A" << endl;
}
};
class B {
public:
void show() {
cout << "B" << endl;
}
};
class C:public A, public B {
};
int main()
{
C obj;
obj.show();
}
这会引发编译时错误,因为对函数 show() 的调用不明确。我想知道编译器是如何理解的?对象创建是一个运行时过程,因此,编译器如何事先知道将创建 C 类对象并调用 show()。谁能告诉我这背后的概念吗?
最佳答案
您继承了基类A
和B
,它们在C
中具有相同的方法show
。这就是您遇到编译器错误对“show”的模糊访问
的原因。
要克服这个问题,您需要更明确地确定要调用哪个“show”方法。使用范围解析运算符可以很容易地做到这一点。
- 调用
A
的show
方法:obj.A::show()
; - 调用
B
的show
方法:obj.B::show()
;
关于c++ - 多重继承中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449606/