c++/c++11 14 17 20

virtual override final

로봇0301 2023. 1. 14. 00:17

virtual은 해당되는 메서드가 가상함수임을 표시하는 키워드다.

1
2
3
4
5
class Test
{
virtual void f();
}
 
cs

c++ 11에 추가된 override는 해당되는 가상함수가 오버라이드 되었음을 나타낸다.

1
2
3
4
5
6
7
8
9
class Test1
{
virtual void f();
}
 
class Test2 : Test1
{
virtual void f() override;
cs

c++11에 추가된 final은 해당되는 가상함수가 오버라이드 되었음을 나타낸다.

또한 다음 서브클래스의 재정의된 함수부터는 더이상 가상함수가 아니라는 것을 의미한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Test1
{
virtual void f();
}
 
class Test2 : Test1
{
virtual void f() override;
 
class Test3 : Test2
{
virtual void f() final;
}
cs

 

자세히 찾아보니 동적바인딩이 아니면 오버라이딩이 아니라는 것 같다.

그래서 오버라이딩이 아니라 재정의라고 했다.