Ключевое слово override [1] указывает, что виртуальная функция (функция класса, определенная с ключевым словом virtual [2]) переопределяет (overrides) поведение другой виртуальной функции.
Идентификатор override, если используется, появляется сразу после декларатора в синтаксисе определения функции-члена класса.
декларатор virt-specifier-seq(не обязательно) pure-specifier(не обязательно) (1) declarator virt-specifier-seq(не обязательно) function-body (2)
(1) При декларации функции-члена класса внутри определения класса override может появляться в virt-specifier-seq сразу после декларатора и перед pure-specifier, если он используется.
(2) В определении функции-члена класса внутри определения класса override может появляться в virt-specifier-seq сразу после декларатора, непосредственно перед телом функции.
В обоих случаях virt-specifier-seq, если используется, будет либо override, либо final, либо final override, либо override final [3].
[В чем смысл override?]
В декларации или определении функции-члена класса спецификатор override гарантирует, что эта функция является виртуальной, и переопределяет виртуальную функцию из базового класса. Если это не так, то в программе ошибка (при компиляции генерируется сообщение об ошибке).
Слово override это идентификатор, имеющий специальный смысл, когда используется после деклараторов функции-члена класса, иначе это не зарезервированное ключевое слово.
Пример:
struct A
{
virtual void foo();
void bar();
};
struct B : A
{
void foo() const override; // Ошибка: B::foo не переназначает A::foo
// (несовпадение сигнатуры)
void foo() override; // OK: B::foo переназначает A::foo
void bar() override; // Ошибка: функция A::bar не виртуальная
};
[Ссылки]
1. override specifier (since C++11) site:cppreference.com. 2. C++: ключевое слово virtual. 3. C++: спецификатор final. |