posted by REDFORCE 2017. 3. 23. 06:51

목차


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이 선언 된 클래스를 끝으로 더이상 자식한테 재정의를 허용 하지 않을 때 사용합니다.



개인적으로는 상속을 하면서 자식으로 뻗어 나갈 때, 이 함수는 더 이상 재정의하면서 계속 썼다간


원 목적에서 완전 틀어저 버릴 거 같아...라는 생각이 들거나


팀 프로젝트에서 내 코드임 재정의하거나 건들지마셈 하고 명시할 때 붙이기도 했습니다.