override specifier (since C++11)
From cppreference.com
C++
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 | ||||||||||||||||
| ||||||||||||||||
| 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 | ||||||||||||||||
| ||||||||||||||||
| Special member functions | ||||||||||||||||
| ||||||||||||||||
| Templates | ||||||||||||||||
| Miscellaneous | ||||||||||||||||
Classes
| General | ||||
| Overview | ||||
class/struct types | ||||
union types | ||||
| Injected-class-name | ||||
| Class property specifiers (C++26) | ||||
| Members | ||||
| Data members | ||||
| Static members | ||||
The this pointer | ||||
| Nested classes | ||||
| Member templates | ||||
| Bit-fields | ||||
using-declarations | ||||
| Member functions | ||||
| Member access specifiers | ||||
| Constructors and member initializer lists | ||||
| Default member initializer (C++11) | ||||
friend specifier | ||||
explicit specifier | ||||
| Converting constructor | ||||
| Special member functions | ||||
| Default constructor | ||||
| Copy constructor | ||||
| Move constructor (C++11) | ||||
| Copy assignment operator | ||||
| Move assignment operator (C++11) | ||||
| Destructor | ||||
| Inheritance | ||||
| Base and derived classes | ||||
| Empty base optimization (EBO) | ||||
| Virtual member functions | ||||
| Pure virtual functions and abstract classes | ||||
override specifier (C++11) | ||||
final specifier (C++11) |
Specifies that a virtual function overrides another virtual function.
Contents |
[edit] Syntax
The identifier override, if used, appears immediately after the declarator in the syntax of a member function declaration or a member function definition inside a class definition.
| declarator virt-specifier-seq (optional) pure-specifier (optional) | (1) | ||||||||
| declarator virt-specifier-seq (optional) function-body | (2) | ||||||||
1) In a member function declaration,
override may appear in virt-specifier-seq immediately after the declarator, and before the pure-specifier, if used.2) In a member function definition inside a class definition,
override may appear in virt-specifier-seq immediately after the declarator and just before function-body.In both cases, virt-specifier-seq, if used, is either override or final, or final override or override final.
[edit] Explanation
In a member function declaration or definition, override specifier ensures that the function is virtual and is overriding a virtual function from a base class. The program is ill-formed (a compile-time error is generated) if this is not true.
override is an identifier with a special meaning when used after member function declarators; it is not a reserved keyword otherwise.
[edit] Keywords
[edit] Example
Run this code
#include <iostream> struct A { virtual void foo(); void bar(); virtual ~A(); }; / member functions definitions of struct A: void A::foo() { std::cout << "A::foo();\n"; } A::~A() { std::cout << "A::~A();\n"; } struct B : A { / void foo() const override; / Error: B::foo does not override A::foo / (signature mismatch) void foo() override; / OK: B::foo overrides A::foo / void bar() override; / Error: A::bar is not virtual ~B() override; / OK: `override` can also be applied to virtual / special member functions, e.g. destructors void override(); / OK, member function name, not a reserved keyword }; / member functions definitions of struct 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, invokes the member function `override()` int override{42}; / OK, defines an integer variable std::cout << "override: " << override << '\n'; }
Output:
B::foo(); B::override(); override: 42 B::~B(); A::~A();
[edit] See also
final specifier (C++11)
|
declares that a method cannot be overridden or a class be derived from[edit] |