override
specifier
(since C++11)
| 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 | ||||||||||||||||
| 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)
|
가상 함수가 다른 가상 함수를 오버라이드 함을 지정합니다.
목차 |
구문
식별자
override
는 사용되는 경우, 클래스 정의 내부의 멤버 함수 선언 또는 멤버 함수 정의 구문에서
선언자(declarator)
바로 뒤에 나타납니다.
| declarator virt-specifier-seq (선택 사항) pure-specifier (선택 사항) | (1) | ||||||||
| declarator virt-specifier-seq (선택 사항) function-body | (2) | ||||||||
override
는 선언자 바로 뒤,
virt-specifier-seq
내에 나타날 수 있으며, 사용되는 경우
pure-specifier
앞에 위치합니다.
override
는
virt-specifier-seq
에서 선언자 바로 뒤와
function-body
바로 앞에 나타날 수 있습니다.
두 경우 모두,
virt-specifier-seq
은, 사용된다면,
override
또는
final
, 또는
final override
또는
override final
입니다.
설명
멤버 함수 선언 또는 정의에서, 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)
|
메서드가 재정의되거나 클래스가 파생되는 것을 금지함을 선언 |