提问者:小点点

C++在继承类中函数重载问题


这可能是一个很难回答的问题,很抱歉。我最近遇到了一个奇怪的问题,当我试图在C++中处理一些高级的东西时,函数重载和继承。

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

有两个类,classAclassB,如下所示;

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

class classB:public classA{ 
    public:
        void func(int){};
};

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

但在main方法中尝试这一点时;

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;
}

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

我怎样才能克服这些呢?在C++中重载不就是这样工作的吗?我是C++新手,但在Java,我知道我可以利用这样的东西。

虽然我已经找到了这条线索,它询问了一个类似的问题,但我认为这两个案例是不同的。


共2个答案

匿名用户

您所需要的只是使用:

class classB:public classA{ 
    public:
        using classA::func;
        void func(int){};
};

它不在基类中搜索func,因为它已经在派生类中找到了一个。using语句将另一重载带入同一作用域,以便它能够参与重载解析。

匿名用户

这个问题的答案就很好地解释了:

为什么我要使用“using”关键字访问我的基类方法?

简而言之,当编译器在当前类中找到匹配的方法名称时,即使该方法不兼容,也会停止从父类类中搜索匹配的方法。我猜这允许一些自动类型转换更符合逻辑地工作,而不需要重写那么多父类方法。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|继承|类|中|函数|重载)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?