이런 상태를 뜻하는데,
두가지 측면에서 비가상 함수를 파생 클래스에서 재정의하지 말라고 권한다.
한가지 측면에선
비가상 함수는 정적 바인딩 되기 때문에, 객체가 CDerived라 할지라도, 이것을 받는 참조자가 CBase의 포인터라면 CBase의 Babo()로 확정되어, CBase()를 호출하는 결과를 낳아 버린다. 이것은 함수의 호출은 객체로 결정되는것이 아닌, 참조자의 타입으로 결정됨에 따라, 디버깅이 매우 힘들게 된다.
다른 한가지 측면에선
public: 상속에 대한 이야기로, public은 is-a 상속이기에 비가상함수는 어떤 파생 클래스건 동일한 작동을 하도록 쓰기 위해서 사용한다. 하지만 이렇게 따로 작동하게 된다면 public 상속에 위배가 된다는 이야기이다.
물론 이것을 컨트롤 하여, 사용 하는것이라면 문제는 없을 것이라고 생각하기 쉬운데, 항목 33을 다시 읽어 보면, 이게 왜 잘못되었는지 알게 될 것이다.
관련링크
http://ikpil.tistory.com/338
http://ikpil.tistory.com/473
두가지 측면에서 비가상 함수를 파생 클래스에서 재정의하지 말라고 권한다.
한가지 측면에선
비가상 함수는 정적 바인딩 되기 때문에, 객체가 CDerived라 할지라도, 이것을 받는 참조자가 CBase의 포인터라면 CBase의 Babo()로 확정되어, CBase()를 호출하는 결과를 낳아 버린다. 이것은 함수의 호출은 객체로 결정되는것이 아닌, 참조자의 타입으로 결정됨에 따라, 디버깅이 매우 힘들게 된다.
다른 한가지 측면에선
public: 상속에 대한 이야기로, public은 is-a 상속이기에 비가상함수는 어떤 파생 클래스건 동일한 작동을 하도록 쓰기 위해서 사용한다. 하지만 이렇게 따로 작동하게 된다면 public 상속에 위배가 된다는 이야기이다.
물론 이것을 컨트롤 하여, 사용 하는것이라면 문제는 없을 것이라고 생각하기 쉬운데, 항목 33을 다시 읽어 보면, 이게 왜 잘못되었는지 알게 될 것이다.
관련링크
http://ikpil.tistory.com/338
http://ikpil.tistory.com/473
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터 (0) | 2008.07.25 |
---|---|
항목 40: 다중 상속은 심사숙고해서 사용하자. (0) | 2008.07.25 |
항목 39 : private 상속은 심사숙고해서 구사하자 (0) | 2008.07.19 |
항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 때는 객체 합성을 사용하자. (2) | 2008.07.18 |
항목 37: 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의 하지 말자. (0) | 2008.07.16 |
항목 35: 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자. (0) | 2008.07.14 |
항목 34: 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자. (0) | 2008.07.09 |
항목 33: 상속된 이름을 숨기는 일은 피하자 (4) | 2008.07.02 |
항목 32: public 상속 모형은 반드시 "is-a(...는 ...의 일종이다)"를 따르도록 만들자. (0) | 2008.07.02 |
항목 31: 파일 사이의 컴파일 의존성을 최대로 줄이자 (0) | 2008.07.02 |
최근댓글