c ++问题与继承类中的函数重载

Sum*_*udu 42 c++ inheritance overloading class

这可能是一个noob问题,抱歉.我最近遇到了一个奇怪的问题,试图在c ++,函数重载和继承中搞乱一些高级的东西.

我将展示一个简单的例子,只是为了证明这个问题;

有两个班,classAclassB如下;

class classA{
    public:
        void func(char[]){};    
};

class classB:public classA{ 
    public:
        void func(int){};
};
Run Code Online (Sandbox Code Playgroud)

据我所知classB,现在应该拥有两个func(..)函数,由于参数不同而重载.

但是在主方法中尝试这个时;

int main(){
    int a;
    char b[20];
    classB objB;
    objB.func(a);    //this one is fine
    objB.func(b);    //here's the problem!
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了错误,因为void func(char[]){}; 超类中的方法classA在派生类中是不可见的classB.

我怎么能克服这个?这不是在c ++中如何重载?我是c ++的新手,但在Java中,我知道我可以使用这样的东西.

虽然我已经找到了这个询问类似问题的帖子,但我认为这两个案例是不同的.

chr*_*ris 53

所有你需要的是using:

class classB:public classA{ 
    public:
        using classA::func;
        void func(int){};
};
Run Code Online (Sandbox Code Playgroud)

它不搜索基类,func因为它已在派生类中找到了一个.该using语句将另一个重载带入同一范围,以便它可以参与重载决策.


hyd*_*yde 10

例如,在这个问题的答案中,它得到了很好的解释:

为什么我应该使用"using"关键字来访问我的基类方法?

简而言之,编译器将在当前类中找到匹配的方法名称时停止从父类中搜索匹配方法,即使该方法不兼容也是如此.我想这允许一些自动类型转换更逻辑地工作,而不需要覆盖这么多父类方法.