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

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

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::showBase中隐藏了具有相同名称的方法。您可以通过using介绍它们。

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

关于c++ - C++中的同时覆盖和重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43819723/

10-17 00:29