Википедия цитата:
Процентовка специальный идентификатор означает, что компилятор будет проверять базовый класс (ы) чтобы увидеть, есть ли виртуальная функция с этой точной подписью. И если этого не произойдет, компилятор выйдет из строя.
http://en.wikipedia.org/wiki/C%2B%2B11#Explicit_overrides_and_final
Редактировать (попытка улучшить чуток ответ):
объявляя метод как «переопределение» означает, что этот метод предназначен переписать (виртуальный) метод на базовый класс. Метод переопределения должен иметь одну и ту же подпись (по крайней мере, для входных параметров) как метод, который он намеревается переписать.
Зачем это необходимо? Ну, допускаются следующие два распространенных случая ошибок:
один из типов типа в новом методе. Компилятор, не подозревая, что он намеревается написать предыдущий метод, просто добавляет его в класс как новый метод. Проблема в том, что старый метод все еще существует, новый добавляется как перегрузка. В этом случае все обращения к старому методу будут действовать так же, как и раньше, без каких-либо изменений в поведении (что было бы самой целью перезаписи).
один забывает объявить метод в суперклассе как «виртуальный», но все же пытается перезаписать его в подклассе. Хотя это, по-видимому, будет принято, поведение будет не таким, как предполагалось: метод не является виртуальным, поэтому доступ через указатели к суперклассу приведет к вызову старого (суперкласса) метода вместо нового (подкласса).
Добавление «переопределение» явно устраняет неоднозначность этого: через это, один говорит компилятору, что три вещи ожидающей:
- есть метод с тем же именем в суперкласс
- это метод в суперклассе объявлен как «виртуальный» (это означает, что он должен быть переписан)
- метод в суперклассе имеет такую же (входную) подпись как метод в подклассе (метод перезаписи)
Если какое-либо из них является ложным, то сигнализируется ошибка.
* примечание: выходной параметр иногда имеет разные, но родственный тип. Прочтите о ковариантных и контравариантных преобразованиях, если они заинтересованы.
Да. –
Это не двойная проверка. Это единственная проверка. –
@ Никос хорошая точка;), исправлено – aiao