В С++ 11 FDIS говорится:
Если виртуальная функция отмечена переопределением virt-specifier и не переопределяет функцию-член базовый класс, программа плохо сформирована. [Пример:
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 (объединено) Я отправил запрос редакторам С++ для изучения вещей. Спасибо, Йоханнес, чтобы указать на это.
- "void f (long) override" не отменяет функцию, особенно. нет виртуального,
- поэтому он не является виртуальным
- поэтому текст "Если виртуальная функция отмечена..." не применяется
- поэтому пример не соответствует тексту.
Но, осознав это, я обнаружил, что намерение "переопределить" контекстное ключевое слово не может быть выполнено: если опечатка в имени функции или неправильном типе аргументов делает эту функцию не виртуальной, тогда стандартный текст никогда не применяется - и "переопределение" оказывается бесполезным.
Лучшим возможным решением может быть
- установка "виртуального" перед примерными функциями