类的方法会覆盖另一个类的所有方法

Dim*_*zyr 5 c++ overriding

方法funcDerivedClass覆盖方法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不应更改任何内容

Rei*_*ica 5

派生类的成员函数不会覆盖基类,它会隐藏它们.要将它们全部纳入范围,请使用using声明:

class DerivedClass : public BaseClass
{
    public:        
        void func(int a){puts("DerivedClass::func(int)");}
        using BaseClass::func;
        //...             
};
Run Code Online (Sandbox Code Playgroud)

实例