티스토리 뷰
C++/Effective Modern C++
[Effective Modern C++] 항목 12. 재정의 함수들을 override로 선언하라
pppgod 2019. 10. 7. 22:54C++11에 오면서 override라는 키워드가 생겼다. java를 해본 사람이라면 @override라는 어노테이션을 본 사람이 있을 것이다. 이 어노테이션은 컴파일러에게 오버라이된 함수라는 것을 알려줘서 부모 클래스으로 부터 상속 받을 함수가 없다면 컴파일시에 알려준다. C++에서도 override 키워드가 똑같은 역할을 한다. 오버라이드 키워드를 만족하는 조건은 다음과 같다.
- 기반 클래스 함수가 반드시 가상 함수이어야 한다.
- 기반 함수와 파생 함수의 이름이 반드시 동일해야 한다(단, 소멸자는 예외).
- 기반 함수와 파생 함수의 매개변수 형식들이 반드시 동일해야 한다.
- 기반 함수와 파생 함수의 const성이 반드시 동일해야 한다.
- 기반 함수와 파생 함수의 반환 형식과 예외 명세가 반드시 호환되어야 한다.
- (C++11에서 추가) 멤버 함수들의 참조 한정사들이 반드시 동일해야 한다.
아래 예제는 컴파일 에러가 나는 예제들이다.
class Base {
public:
virtual void mf1() const;
virtual void mf2(int x);
virtual void mf3() &;
void mf4() const;
};
class Derived: public Base {
public:
virtual void mf1() override; // const를 빼먹음
virtual void mf2(unsigned int x) override; // int -> unsigned int x
virtual void mf3() && override; // && -> &
virtual void mf4() const override; // virtual을 빼먹음
};
위 코드에 주석의 이유로 컴파일에러가 난다. 만약 override를 붙이지 않았다면 override가 안되었음에도 되었다고 착각 했을 것이다.
참고 서적
스콧 마이어스, Effective Modern C++
'C++ > Effective Modern C++' 카테고리의 다른 글
[Effective Modern C++] 항목 14. 예외를 방출하지 않을 함수는 noexcept로 선언하라 (0) | 2019.10.20 |
---|---|
[Effective Modern C++] 항목 13. iterator보다 const_iterator를 선호하라 (0) | 2019.10.20 |
[Effective Modern C++] 항목 11. 정의되지 않은 비공개 함수보다 삭제된 함수를 선호하라 (0) | 2019.10.07 |
[Effective Modern C++] 항목 10. 범위 없는 enum보다 범위 있는 enum을 선호하라 (0) | 2019.09.28 |
[Effective Modern C++] 항목 9. typedef보다 별칭 선언을 선호하라 (0) | 2019.09.28 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 발아시기
- Future
- C
- Overloading
- forward
- 다이소
- Override
- Effective
- auto
- std::forward
- detach
- Effective Modern C++
- async
- const
- MOVE
- C++14
- CPP
- Perfect
- Join
- 보편 참조
- 포인터
- thread
- std::move
- Unreal
- Forwarding
- 보편참조
- 람다
- Modern
- C++
- C++11
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
글 보관함