목차
1. Auto
2. range based for
3. enum class
4. non-static data member initializers
5. initializer lists
6. default / delete definition
7. override / final
8. emplacement
9. constexpr
10. lambda
11. random
12. thread
이번 글에서는 [7편] override / final 에 대해서 살펴보도록 하겠습니다.
사실 override와 final은 매우 쉬운거라 딱히 한개의 글로 적기 뭐했습니다만..
블로그 분량을 늘려서 빨리 구글에 노출되야해!!!
라는 것 때문에 글을 나눈 것은 아닙니다.
7. override / final
override : 컴파일러에게 부모클래스의 멤버 함수를 재 정의함을 알린다.
final : 부모 클래스의 특정 멤버 함수를 자식 클래스에서 재정의하지 못하도록 막을 때 사용 한다.
오버라이드는 간단히 부모 클래스에 선언 된 함수를 재정의 할 때나
이미 부모클래스에 있는 함수 다시 재정의 해본다아~~? 하고 절차를 확인할 때 사용 할 수 있습니다.
위 Base에 선언 된 가상함수 foo(int i) 를 override 한 것은 잘 되지만
아래 파라미터가 float 형인 것으로 override를 시도하면 컴파일 에러가 발생하게 됩니다.
개인적으로는 override를 이용하여 내가 부모클래스에 만들어 뒀던 가상함수를
다시 재정의하여 쓸 때 오타가 없는지 확인 하는 용도로도 썼었습니다.
간단한 예로 이렇게 활용했지요~!
Base Class 에 virtual void Update( float timeDelta); 라 만들어진 것을 // Update 가 대문자로 시작
Derived Class 에 virtual void update (float timeDelta) override; 라고 적으면 // update 가 소문자로 시작
이런식으로 적으면 바로 컴파일러가 update와 Update를 구분하여 너 철자 틀렸심. 하고 빨간줄을 그어줍니다.
두 번째 Final은 반대로 final이 선언 된 클래스를 끝으로 더이상 자식한테 재정의를 허용 하지 않을 때 사용합니다.
개인적으로는 상속을 하면서 자식으로 뻗어 나갈 때, 이 함수는 더 이상 재정의하면서 계속 썼다간
원 목적에서 완전 틀어저 버릴 거 같아...라는 생각이 들거나
팀 프로젝트에서 내 코드임 재정의하거나 건들지마셈 하고 명시할 때 붙이기도 했습니다.
'Programming > C++' 카테고리의 다른 글
[9편] Modern C++ 정리: constexpr (0) | 2017.03.23 |
---|---|
[8편] Modern C++정리: emplacement (0) | 2017.03.23 |
[6편] Modern C++정리: dafault / delete definition (0) | 2017.03.22 |
[4-5편] Modern C++정리: non-static data member initializers (0) | 2017.03.22 |
[3편] Modern C++정리: enum class (0) | 2017.03.22 |