-
37. 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자프로그래밍/Effective c++ 2016. 3. 10. 16:41가상함수는 동적으로 바인딩 되는 반면, 매개변수는 정적으로 바인딩 되기 때문에기본 클래스와 파생클래스의 매개변수의 기본 지정값이 다르면 파생클래스 객체를 기본클래스 포인터로 받는 경우 기본 클래스의 기본 매개변수로 대입된다.class A{public:virtual void f(int i = 0);}class B{public:virtual void f(int i = 1);}A a = new B;a.f(); //--> i가 0으로 대입된다.그래서 이런걸 하려면 private로 가상함수를 빼고 이를 호출하는 새로운 public함수를 만들어서 거기서 매개변수 기본값 설정을 하라는데...class B{public:void pubf(int i = 1){f(i);}private:virtual void f(int i);}이것도 결국 36의 문제(비가상함수 재정의)에 부닥치게 될 것 같으므로 안쓰는게...
'프로그래밍 > Effective c++' 카테고리의 다른 글
39. private 상속은 심사숙고해서 구사하자. (0) 2016.03.10 38. "has-a(... 는 ... 를 가짐)" 혹은 "is-implemented-in-terms-of ( ... 는 ... 를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자. (0) 2016.03.10 36. 상속받은 비가상 함수를 파생 클래스에서 재정의 하는 것은 절대 금물 (0) 2016.03.10 35. 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자. (0) 2016.03.10 34. 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자. (0) 2016.03.10