大家好,我对以下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::show
在Base
中隐藏了具有相同名称的方法。您可以通过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/