2015-12-25 3 views
2

Может кто-нибудь помочь мне понять, почему перегруженная функция бара в этом случае не работает?C++ Наследование: вызов функции перегруженного базового класса

class A { 
    public: 
    void foo(int a) {}; 
    void bar(int a) {}; 
    virtual void bar()=0;  
    }; 

    class B : public A{ 
    public: 
     virtual void bar() override {}; 
    }; 

    int main(int argc, char* argv[]) 
    { 
     B b; 
     b.foo(2); // fine 
     b.bar(); // fine 
     b.bar(2); // not fine 
    } 

ответ

3

Первостепенной работает отлично, но функция переопределения тени базового класса. То есть, поиск имени в известном классе B находит только тот, что находится в B, поиск там останавливается. Вы можете либо использовать квалификацию базового класса, либо объявление using в B, или (уродливые) ручные экспедиторы.

Пример:

class B 
    : public A 
{ 
public: 
    using A::bar; 
    virtual void bar() override {}; 
}; 
Смежные вопросы