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 hidingます。Base::foo(int, int)あなたは提供することで隠れますDerived::foo(int)

于 2012-08-24T16:19:17.377 に答える