方法func来DerivedClass覆盖方法func及其所有重载BaseClass.
#include <cstdio>
class BaseClass
{
public:
void func(int a){puts("BaseClass::func(int)");};
void func(int a, int b){puts("BaseClass::func(int, int)");};
void func(int a, int b, int c){puts("BaseClass::func(int, int, int)");};
//...
};
class DerivedClass : public BaseClass
{
public:
void func(int a){puts("DerivedClass::func(int)");}
//...
};
int main()
{
DerivedClass obj;
obj.func(0);
obj.func(0, 0); // error
obj.func(0, 0, 0); // error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如何修复此代码以最终在屏幕上派生:
DerivedClass::func(int)
BaseClass::func(int, int)
BaseClass::func(int, int, int)
Run Code Online (Sandbox Code Playgroud)
编辑1
在函数中main不应更改任何内容
派生类的成员函数不会覆盖基类,它会隐藏它们.要将它们全部纳入范围,请使用using声明:
class DerivedClass : public BaseClass
{
public:
void func(int a){puts("DerivedClass::func(int)");}
using BaseClass::func;
//...
};
Run Code Online (Sandbox Code Playgroud)