C++:重叠基类方法

0 c++ inheritance overloading class multiple-inheritance

继承两个基类时,如果两者都有一个具有相同名称和签名的方法会发生什么?

class Physics
{
public:
    void Update() { std::cout << "Physics!" }
};

class Graphics
{
public:
    void Update() { std::cout << "Graphics!" }
};

class Shape : Physics, Graphics
{
};

int main()
{
    Shape shape;
    shape.Update();
}
Run Code Online (Sandbox Code Playgroud)

会发生什么?

ice*_*ime 8

好吧,首先你的代码不能编译,无论调用如何Update:

  • Update成员函数返回缺少类型
  • Shape私有地从Physics和继承Graphics,因此Update无法访问 main

现在,话虽如此,当您尝试调用时会发生什么,Update这会导致编译错误.可以使用以下方式解除这种歧义:

shape.Physics::Update();
shape.Graphics::Update();
Run Code Online (Sandbox Code Playgroud)