C++ 基类中的f(int)是否继承到具有f(double)的派生类D中?

C++ 基类中的f(int)是否继承到具有f(double)的派生类D中?,c++,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(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';
    }
B类{
公众:

intf(inti){cout这是函数隐藏的经典例子 C++中的重载解析在类中不起作用,派生类中的函数<强>隐藏< /强>基类中具有相同名称的所有函数。编译器只为派生类对象中的派生类中查看函数。

通过使用派生类中的使用声明,可以取消隐藏派生类的所有基类函数。

加上

using B::f;
在派生类中,将使派生类对象能够访问基类中名为
f()
的所有函数,就像它们是派生类中的重载函数一样


这应该是一本很好的读物:


我认为如果给派生类一个与基类中存在的函数同名的函数,派生类的“函数”将隐藏基类的函数。如果您只是想重载,请使用
using
关键字

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

class D : public B {
public:
    using B::f; //brings in all of B's "f" functions
                //making them equals of D's "f" functions.
    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';
}
B类{
公众:
int f(int i){cout什么是“不工作”?你看到了什么,你希望看到什么?它两次都在调用f(double)。所以我认为f(int)不是继承的。但为什么它不是继承的呢?还有常见问题解答: