переопределить не виртуальные функции
C ++ 11 FDIS это говорит
Если виртуальная функция помечена с помощью переопределения virt-спецификатора и не переопределяет функцию-член базового класса, программа является некорректной. [ Пример:
struct B {
virtual void f(int);
};
struct D : B {
void f(long) override; // error: wrong signature overriding B::f
void f(int) override; // OK
};
Что, еслиB::f
не был бы отмечен виртуальным? Программа плохо сформирована, тогда? Илиoverride
тогда быть проигнорированным. Я не могу найти какую-либо обработку этого случая в тексте STD.
Обновление 1/2 (объединено) Я направил запрос в редакторы C ++, чтобы разобраться. СпасибоJohannes чтобы указать на это мне.
«void f (long) override» не переопределяет функцию, особенно нет виртуального,поэтому он не виртуальныйпоэтому текст "Если виртуальная функция помечена ..." не применяетсяпоэтому пример не соответствует тексту.Но, поняв это, я обнаружил, что цель контекстного ключевого слова «переопределить» не может быть достигнута: если опечатка в имени функции или неправильный тип аргумента делает саму функцию не виртуальной, то текст стандарта никогда не применяется - - и «переопределить» становится бесполезным.
Лучшее возможное решение может быть
поставить «виртуальный» перед функциями примера