C++ 中的同时覆盖和重载

Simultaneous overriding and overloading in C++

大家好我对以下一段 C++ 代码感到困惑,其中重载和覆盖在某种程度上是同时发生的。

这是我的编译器给出的错误(mingw32-g++ inside Code::Blocks 13.12)

error: no matching function for call to 'Derived::show()'
note:  candidate is:
note:  void Derived::show(int)
note:  candidate expects 1 argument, 0 provided

这是生成它们的代码。

    #include <iostream>
    using namespace std;

    class Base{
    public:
      void show(int x){
        cout<<"Method show in base class."<<endl;
      }
      void show(){
        cout<<"Overloaded method show in base class."<<endl;
      }
    };

    class Derived:public Base{
    public:
      void show(int x){
        cout<<"Method show in derived class."<<endl;
      }
    };

    int main(){
      Derived d;
      d.show();
    }

我试图将 Base::show() 声明为虚拟的。然后我用 Base::show(int) 尝试了同样的方法。也不行。

这是隐藏姓名。 Derived::show 隐藏Base 中的同名方法。你可以通过using.

来介绍他们
class Derived:public Base{
public:
  using Base::show;
  void show(int x){
    cout<<"Method show in derived class."<<endl;
  }
};