이런 상태를 뜻하는데,


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

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

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


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


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


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기