class A {
public:
void foo() {
cout << "A::foo()" << endl;
}
void foo(int a) {
cout << "A::foo( int )" << endl;
}
};
class B : public A {
public:
void foo(int a) {
cout << "B::foo( int )" << endl;
}
};
int main()
{
B b;
b.foo();
return 0;
}
Компилятор выдает ошибку:
ошибка: нет подходящей функции для вызова ‘B::foo()’
замечание: претенденты: void B::foo(int)
Т. е. при переопределении функции в наследнике необходимо переопределять все перегруженные версии функции. Не кажется ли вам нелогичным такое поведение? По-моему, логичнее было бы вызывать подходящую по сигнатуре функцию родительского класса.