c++ - 多重继承中的歧义

标签 c++ oop inheritance runtime

假设我有这个简单的代码

#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()。谁能告诉我这背后的概念吗?

最佳答案

您继承了基类AB,它们在C中具有相同的方法show。这就是您遇到编译器错误对“show”的模糊访问的原因。

要克服这个问题,您需要更明确地确定要调用哪个“show”方法。使用范围解析运算符可以很容易地做到这一点。

  • 调用Ashow方法:obj.A::show();
  • 调用Bshow方法:obj.B::show();

关于c++ - 多重继承中的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449606/

相关文章:

C++如何读取流直到行尾

c++ - 从多项式函数字符串动态分配数组

c++ - 仅包含基类 header 时访问派生类

c++ - 指针类错误

c++ - std::enable_if 使用其内部类型而不使用它

java - 删除转义字符

java - 给定相同类型的对象更新当前对象

c++ - C++中的抽象类和纯抽象类有什么区别?

c++ - 我可以强制继承一个类吗?

javascript - 如何从类构造函数中的参数继承方法