프로그래밍/c++
c++11에 추가된 override 키워드와 필요성
제페
2015. 7. 13. 00:13
반응형
Session을 상속받는 MySession이라는 클래스가 있다고 하자.
MySession 클래스는 Session의 OnReceive 함수를 재정의 하려고 했다.
1 2 3 4 5 6 7 | class MySession : public Session { public: virtual void OnReceive() { } }; | cs |
하지만 Session의 OnReceive의 정의는 이와 달랐다.
1 2 3 4 5 6 7 | class Session { public: virtual void OnReceive(const void* buffer, size_t bytes) { } }; | cs |
이 경우 OnReceive는 Session의 OnReceive 재정의가 아닌, MySession 클래스에서 새롭게 정의된 가상함수로 인식을 한다.
C++11부턴 프로그래머의 이와 같은 실수를 예방하고자 override 키워드가 도입이 되었는데
1 2 3 4 5 6 7 | class MySession : public Session { public: virtual void OnReceive() override { } }; | cs |
위와 같이 사용을 할 수 있다. override 키워드를 붙이면 override함수가 아닐 시에는 컴파일 단에서 오류를 잡아준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class Session { public: virtual void OnReceive(const void* buffer, size_t bytes) { } }; class MySession : public Session { public: virtual void OnReceive() override // error! { } virtual void OnReceive(const void* buffer, size_t bytes) override // ok! { } }; | cs |
반응형