基类中的f(int)是在具有f(double)的派生派生类D中继承的吗

  • 本文关键字:派生 double 继承 int 基类 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';
    }

这是函数隐藏的经典示例
C++中的重载解析不能跨类工作,派生类中的函数隐藏基类中所有名称相同的函数。编译器只在派生类对象的派生类中看到函数。

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

添加,

using B::f;

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


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

警告的含义是什么:派生::f(char(隐藏基::f(double(

我认为,如果给派生类一个与基类中存在的函数同名的函数,则派生类的"function"将隐藏基类的"functions"。如果您只是想重载,请使用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';
}

最新更新