C++: спецификатор override |
![]() |
Добавил(а) microsin |
Ключевое слово override [1] указывает, что виртуальная функция (функция класса, определенная с ключевым словом virtual [2]) переопределяет (overrides) поведение другой виртуальной функции. Идентификатор override, если используется, появляется сразу после декларатора в синтаксисе определения функции-члена класса. декларатор virt-specifier-seq(не обязательно) pure-specifier(не обязательно) (1) (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. |