Перегрузка и наследование
От: Аноним  
Дата: 23.05.10 11:20
Оценка: :)
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)


Т. е. при переопределении функции в наследнике необходимо переопределять все перегруженные версии функции. Не кажется ли вам нелогичным такое поведение? По-моему, логичнее было бы вызывать подходящую по сигнатуре функцию родительского класса.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.