이런 상태를 뜻하는데,


두가지 측면에서 비가상 함수를 파생 클래스에서 재정의하지 말라고 권한다.

한가지 측면에선
비가상 함수는 정적 바인딩 되기 때문에, 객체가 CDerived라 할지라도, 이것을 받는 참조자가 CBase의 포인터라면 CBase의 Babo()로 확정되어, CBase()를 호출하는 결과를 낳아 버린다. 이것은 함수의 호출은 객체로 결정되는것이 아닌, 참조자의 타입으로 결정됨에 따라, 디버깅이 매우 힘들게 된다.

다른 한가지 측면에선
public: 상속에 대한 이야기로, public은 is-a 상속이기에 비가상함수는 어떤 파생 클래스건 동일한 작동을 하도록 쓰기 위해서 사용한다. 하지만 이렇게 따로 작동하게 된다면 public 상속에 위배가 된다는 이야기이다.


물론 이것을 컨트롤 하여, 사용 하는것이라면 문제는 없을 것이라고 생각하기 쉬운데, 항목 33을 다시 읽어 보면, 이게 왜 잘못되었는지 알게 될 것이다.


관련링크
http://ikpil.tistory.com/338
http://ikpil.tistory.com/473


posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. hs 2015.04.29 00:00  Addr  Edit/Del  Reply

    그럼 비가상함수는 자바로 다졌을 때, final void babo()로 생각하면 되는 건가요? 파생에서 오버로라이딩 못하게요