Программирование ARM C++: спецификатор override Thu, October 01 2020  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

C++: спецификатор override Печать
Добавил(а) microsin   

Ключевое слово 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.
3C++: спецификатор final.

 

Добавить комментарий


Защитный код
Обновить

Top of Page