항목 38. 계승된 부재 인자값을 재정의하지 않도록 한다.

여기서 계승된 메소드는
가상함수일때로 국한한다는 전제조건이 따른다.

부재 인자값(default argument)이란?
기본 인자값을 말한다 (void hehehe(int a = 1); 여기서 a가 기본 인자다. 사실 부재인자도 맞는 말이다.)
2008/07/16 15:06:11 추가, 영문 표기가 오히려, 한글 표기보다 직관적일 경우가 많이 있는것 같다.

이유
1. 부모클래스의 메소드에서 설정했던 기본 인자값으로
... 자식클래스의 메소드에서 기본 인자값이
... 자동 셋팅 되기 때문이다. 2008/07/16 15:06:11 수정
1. 부모 클래스에서 멤버 함수의 디폴트 매개변수는 정적바인딩 되기 때문에 동적 바인딩 되는 멤버 함수가 호출되더라도, 정적 바인딩되었던 멤버 함수의 디폴트 매개변수를 호출하기 때문이다. 자세한 내용은 트랙백에 표기해 둔다,


해결 방법
1. 부모 클래스에서 선언했다면, 자식클래스에 영향을 미치므로 자식클래스에선 사용치 마라
- .. 사용해도 어차피 안된다! 2008/07/16 15:06:11 수정, 되긴 한다.
2. 가상함수는 동적 결합을 하지만, 기본 인자값(부재인자값)은 정적 결합됨을 이해해라!

참조 : 정적 결합과 동적 결합이란?
정적 결함
1. pS, pR, pE 는 CShape*로  정적 결합 했다고 말한다. 즉 이들의 형태는 소멸되기 전까지 CShape* 형이다.
2. 캐스팅 변환으로 임시로 변환 할수는 있다.

동적 결합(포인터나 레퍼런스에 한해서다)
1. pS, pR, pE가 가리키는 대상에 따라 바뀐다.


개인적 생각
1. 보물이다. 한번쯤 테스트 하고 넘어가자.

2. C++이 왜 이렇게 특이하게 동작하는지 .. 열 받는다면, .. 당신의 선택은 두개뿐이다.
첫째, 다른 언어로 간다.
둘째, 다른 언어를 만든다.
셋째, 원래 그런거다 라고 인정한다.
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요