Если у вас есть метод Базового класса объявлен как virtual
, Для того, чтобы переопределить его необходимо предоставить функцию с точно такой же подписью в производном классе (возвращаемые типы Co-вариантных разрешены, хотя).
Если имя функции такое же, но подпись в производном классе варьируется от одного в базовом классе, чем не overidding больше, это function Hiding, производный метод класса скрывает метод базового класса.
Функция Перегрузка никогда не проходит по классам, вы можете перегружать методы внутри одного класса или бесплатные функции, но не по классам. Когда вы пытаетесь сделать это по классам, то, что вы в конечном итоге получаете, скрывает функцию.
Чтобы применить методы класса Base в рамках класса Derived, вам необходимо добавить
дополнительных using functionName
в ваш класс Derived.
EDIT:
Что касается добротности, когда использовать virtual
над перегрузкой, ответ:
Если вы собираетесь функции вашего класса должны быть переопределены для выполнения полиморфизма вы должны пометить их как virtual
, а не если вы этого не намерены.
Хорошо читать:
When to mark a function in C++ as a virtual?
Чтобы перегрузить функцию элемента базового класса в производном классе, вам просто нужно объявление 'using'. – Potatoswatter
@Potatoswatter: Да, вам нужно сделать это в дополнение к простому предоставлению методов, поэтому в этом смысле это больше, чем просто предоставление перегруженных версий. –
Я также пытался сформулировать ответ, но я не мог объяснить различия между созданием функции в базе виртуальной или нет. Вы можете перегружать и то же самое в производном классе (с другой подписью). И я думаю, что это часть вопроса ОП. –