Namespaces
Variants

override specifier (since C++11)

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Virtual function
override specifier (C++11)
final specifier (C++11)
Special member functions
Templates
Miscellaneous

Указывает, что виртуальная функция переопределяет другую виртуальную функцию.

Содержание

Синтаксис

Идентификатор override , если используется, появляется непосредственно после декларатора в синтаксисе объявления функции-члена или определения функции-члена внутри определения класса.

declarator virt-specifier-seq  (optional) pure-specifier  (optional) (1)
declarator virt-specifier-seq  (optional) function-body (2)
**Примечание**: В данном случае весь текст на странице состоит из технических терминов C++ и HTML-разметки. Согласно инструкциям: - HTML-теги и атрибуты не переведены - Текст внутри тегов ` `, `
`, `` не переводится (хотя в данном примере их нет)
- C++ специфические термины (declarator, virt-specifier-seq, pure-specifier, function-body) не переводятся
- Сохранено оригинальное форматирование
Таким образом, перевод не требуется, так как весь содержательный текст представляет собой неизменяемые технические термины C++.
1) В объявлении функции-члена, override может появляться в virt-specifier-seq сразу после декларатора и перед pure-specifier , если он используется.
2) В определении функции-члена внутри определения класса, override может появляться в virt-specifier-seq непосредственно после декларатора и непосредственно перед function-body .

В обоих случаях, virt-specifier-seq , если используется, может быть либо override , либо final , либо final override , либо override final .

Объяснение

В объявлении или определении функции-члена, override спецификатор гарантирует, что функция является виртуальной и переопределяет виртуальную функцию из базового класса. Программа становится некорректной (генерируется ошибка компиляции), если это не выполняется.

override является идентификатором со специальным значением при использовании после деклараторов функций-членов; в остальных случаях это не зарезервированное ключевое слово .

Ключевые слова

override

Пример

#include <iostream>
struct A
{
    virtual void foo();
    void bar();
    virtual ~A();
};
// определения функций-членов структуры A:
void A::foo() { std::cout << "A::foo();\n"; }
A::~A() { std::cout << "A::~A();\n"; }
struct B : A
{
//  void foo() const override; // Ошибка: B::foo не переопределяет A::foo
                               // (несоответствие сигнатуры)
    void foo() override; // OK: B::foo переопределяет A::foo
//  void bar() override; // Ошибка: A::bar не является виртуальной
    ~B() override; // OK: `override` также может применяться к виртуальным
                   // специальным функциям-членам, например деструкторам
    void override(); // OK, имя функции-члена, не зарезервированное ключевое слово
};
// определения функций-членов структуры B:
void B::foo() { std::cout << "B::foo();\n"; }
B::~B() { std::cout << "B::~B();\n"; }
void B::override() { std::cout << "B::override();\n"; }
int main()
{
    B b;
    b.foo();
    b.override(); // OK, вызывает функцию-член `override()`
    int override{42}; // OK, определяет целочисленную переменную
    std::cout << "override: " << override << '\n';
}

Вывод:

B::foo();
B::override();
override: 42
B::~B();
A::~A();

Смотрите также

final спецификатор (C++11) объявляет, что метод не может быть переопределен или класс не может быть унаследован