перегрузка + наследование = сокрытие?
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 01.07.04 19:11
Оценка:
Пытаюсь объявить в классе (пусть это CBase) оператор, в его наследнике CDerived — такой же, и вызвать в нем старый оператор без явного указания namespace. Ну, чтобы виртуальность нормально работала — от этого наследника (CDerived) ведь тоже могут отнаследоваться и перекрыть ту, старую версию оператора, описанную в CBase.

Типа вот такого кода:
class CBase {
  void operator() () {};
};
class CDerived : public CBase {
  void operator() (int a) { this->operator() (); } //C2660: 
                              // ...::operator`()'' : function does not take 0 arguments
};


Ну так VC7 не находит унаследованный оператор. Попробовал то же с обычными функциями с одинаковыми именами — тот же эффект. Возникает подозрение, что поиск перегруженных версий функции (оператора) осуществляется лишь в пределах данного наследника, а унаследованные методы в рассчет не берутся. Это так?


Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.