Используйте ключевое слово override
Виртуальные функции, переопределенные в порожденном классе, также являются виртуальными, и согласно стандарту не требуют ключевых слов virtual и override. Однако настоятельно рекомендуется указывать override (virtual при этом указывать избыточно) в целях защиты от попыток изменить сигнатуру функции в базовых классах (это приведет к ошибке компиляции). Кроме того, это позволяет быстро увидеть, что эта функция виртуальная и переопределенная, что особенно актуально при наследовании от порожденного класса.
Неправильно:
class Derived : public Base {
public:
virtual std::string GetBaseName() const noexcept {
return GetNode()->name;
}
virtual xmlElementType GetType() const noexcept {
return GetNode()->type;
}
// ...
}
Правильно: