이번 항목은 가상함수를 사용시, 주의해야 할 점을 설명하고 있다. 다음 코드를 보자. #include #include using namespace std; /*Base 클래스의 정의 구역*/ class Base { public: virtual void f( int ); virtual void f( double ); virtual void g( int i = 10 ); }; void Base::f( int ) { cout
상속 검색 결과
내가 C++에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve C++ 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. - 최익필 이번 항목의 주제는 "템플릿 기반 클래스를 상속받은 파생 클래스는 '컴파일 타임 상속 체계'가 끊긴다. 그러므로 템플릿 기반 클래스에 접근 하는 방법을 알아 두어야 한다." 이다. 이 컴파일 타임 상속 체계는 컴파일 타임에 컴파일러가 구문해석 체계를 뜻한다. 구문해석 체계에서 잘못 된 것이라면, 컴파일이 되지 않는다. 템플릿 기반 클래스 상속은 상속에 따른 구문해석이 끊기어, 해석 실패가 된다. 못 믿겠다면 예제 코드를 보자. // ikpil.com or..
내가 C++에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve C++ 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. 본론으로 들어와서, 나는 설계 단계에서 다중 상속 할까낭~ 하는 생각을 한적은 있었지만, 지금까지 다중 상속을 해서 코딩한적은 없다. 왜냐하면, 일단 설계단계 조차 난해하고, 조금 복잡해지는 경향이 있었다. 그래서 스스로가 "지금 여기에 꼭 필요한가?" 란 질문에 항상 "지금은 아니오" 라고 답하곤 했기 때문이다. 이번 항목 40의 제목처럼 "다중 상속은 심사숙고해서 사용하자" 로 이야기 하고 있다. 그렇다면 나는 이런 생각을 하곤 한다. "왜!? 무엇 때문에!?"..
저번장까지는 설계에 관한 이야기보다는 상속시 유의해야 되는 부분이 강조되었다면, 이번 항목은 .. 설계에 관한 부분이다. 나는 지금까지 private 상속이면 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 이고 클래스 내부에서 객체선언하면 "has-a(...는...를가짐)" 이다 라고 이해했지만, 이것은 잘못된 이해이다. 각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다. 그렇다면 다시 제목을 봐보자.. 항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 ..
이렇게 모모 하지 말자, 모모 하자. 이런식으로 나온 제목을 보고 있노라면, 마음이 편해진다. 생각할 필요 없이 그대로 믿고 따르면 되기 때문이다.(.. 물론 알아야 할 필요가 없다는것은 아니지만. ㅋ) 왜냐하면 함수의 디폴트 매개변수는 정적 바인딩되고, 상속되는 함수는 동적으로 바인딩 되기 때문이다. .. 이렇게만 정리하면 편하겠지만, 정적 바인딩, 동적 바인딩에 대해서 알아야 더 편한 세상에 살수 있어, 정리해 둔다. 정적 바인딩이란, 확실한 것들을 미리 묶는다라는 개념으로. 미리 묶었기 때문에 예측하여 캐싱할수가 있어, 더 빠르다. 공식적으론 선행 바인딩(Early Binding)이라 부른다.(이 말이 개인적으로 더 좋다고 보는데..) 동적 바인딩이란, 유동적이기에 미리 묶을수 없지만, 동적으로 다..
항목 41. 계승과 템플릿과의 차이점을 이해한다. 이유. 1. 코드 재사용을 위해서 (코드 재사용은 정말 중요하다. 물론 개념 재사용도 중요하다..) 해결 방법 1. 계승과 템플릿과의 차이점을 이해한다. 계승이란? 1. 다른 클래스에 있는 데이터와 메소드를 흡수하는것을 계승이라 한다. 템플릿이란? 1. 동일한 작업의 처리되는 데이터를 사용자가 지정하는 것을 템플릿 이라 한다. 어떨 때 계승과 템플릿을 구분지어 사용 하는가? 계승은 객체의 타입이 클래스에 정의된 함수들의 동작 원리에 영향을 미치는 경우 템플릿은 객체의 타입이 클래스에 정의된 함수들의 동작 원리에 영향을 미치지 않을 경우 개인적인 생각. 역시 프로그래머의 능력은 설계와 최적화에서 평가 된다. (구현은 기본이고..)
최근댓글