6

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

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
}

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

4

2 回答 2

7

这是因为同名的基函数被隐藏了。

您需要使用using未覆盖的功能:

class Derived : public Base
{
public:
    using Base::foo;
    virtual void foo(int) {}  //this hides all base methods called foo
};
于 2012-08-24T16:19:35.147 回答
3

它被称为Name hidingBase::foo(int, int)你通过提供隐藏Derived::foo(int)

于 2012-08-24T16:19:17.377 回答