티스토리 뷰

 C++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++
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
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
글 보관함