如果重载函数仅被部分覆盖,则多态性不起作用

Ale*_*ler 6 c++ polymorphism inheritance overloading

今天我觉得自己像个菜鸟:

class Base
{
public:
    virtual void foo(int)=0;
    virtual void foo(int, int) {}
    virtual void bar() {}
};

class Derived : public Base
{
public:
    virtual void foo(int) {}
};

void main()
{
    Derived d;
    d.bar(); // works
    d.foo(1); // works
    d.foo(1,2); // compiler error: no matching function call
}
Run Code Online (Sandbox Code Playgroud)

我希望d继承foo(int, int)Base,但事实并非如此.那我在这里错过了什么?

Luc*_*ore 7

那是因为隐藏了具有相同名称的基本功能.

你需要使用using你没有覆盖的功能:

class Derived : public Base
{
public:
    using Base::foo;
    virtual void foo(int) {}  //this hides all base methods called foo
};
Run Code Online (Sandbox Code Playgroud)