Когда у вас есть метод Базового класса, объявленный как virtual
, чтобы переопределить его, вам нужно предоставить функцию с точно такой же сигнатурой в производном классе ( Коопсионные типы возврата разрешены, хотя) ,
Если имя вашей функции такое же, но подпись в производном классе отличается от подписи в базовом классе, то она больше не переопределяется. Это функция, скрывающая , метод производного класса скрывает Метод базового класса.
Перегрузка функций никогда не распространяется на классы , Вы можете перегружать методы внутри одного и того же класса или свободных функций, но не между классами. Когда вы пытаетесь сделать это в разных классах, вы получаете скрытие функций
Чтобы методы класса Base попали в область действия вашего производного класса, вам нужно добавить
дополнительно using functionName
к вашему производному классу.
EDIT:
Что касается Q, когда использовать virtual
перегрузка, ответ:
Если вы хотите, чтобы функции вашего класса были переопределены для полиморфизма времени выполнения , вы должны пометить их как virtual
, а не если вы не собираетесь этого делать.
Хорошо Читать:
Когда помечать функцию в C ++ как виртуальную?