基类中的f(int)是否在派生的派生类D中继承了f(double)?

Sur*_*uri 3 c++

可能重复:
为什么派生类中的重写函数会隐藏基类的其他重载?

基类中的f(int)是否在派生的派生类D中继承?如果是,那么为什么超载在这里不起作用.如果没有那么为什么f(int)不被继承,因为类d是公开派生的.我很迷惑.

    class B {
    public:
        int f(int i) { cout << "f(int): "; return i+1; }
        // ...
    };

    class D : public B {
    public:
        double f(double d) { cout << "f(double): "; return d+1.3; }
        // ...
    };

    int main()
    {
        D* pd = new D;

        cout << pd->f(2) << '\n';
        cout << pd->f(2.3) << '\n';
    }
Run Code Online (Sandbox Code Playgroud)

Alo*_*ave 6

这是函数隐藏的经典示例.
C++中的重载决策不适用于各种类,派生类中的函数隐藏 Base类中具有相同名称的所有函数.编译器仅在派生类中查看派生类对象的函数.

您可以使用using声明取消隐藏 派生类的所有基类函数.在你的派生类中.

添加,

using B::f;
Run Code Online (Sandbox Code Playgroud)

在派生类中,将使派生类对象能够访问名为f()int Base类的所有函数,就好像它们是Derived类中的重载函数一样.


这应该是一个很好的阅读:

是什么意思,警告:Derived :: f(char)隐藏Base :: f(double)?