항목 39. 계층도의 아래쪽 클래스로 다운캐스트 하지 않도록 한다. 캐스트(cast)란? 사전적 의미 : http://endic.naver.com/endic.nhn?docid=182460&rd=s 형 변환을 말하며, C 스타일은 (원하는 형) 으로 쓴다. 예) int a = 3; (double)a .....; 식 C++ 스타일 4종 캐스트 변환이 있으며, 기존 C를 보다 구체적으로 분류하여 가독성과 안정성을 고려한방식이다. static_cast, dynamic_cast, const_cast, 절대권력자 reinterpret_cast 사용법은 인터넷에 널려 있다. 그렇다면 다운 캐스트(down cast)란? 부모클래스를 가리키는 포인터를 자식을 가리키는 포인터로 바꾸는것 을 다운 캐스트라 한다. (부모에서..
책 정리/Effective C++ 2판 검색 결과
항목 38. 계승된 부재 인자값을 재정의하지 않도록 한다. 여기서 계승된 메소드는 가상함수일때로 국한한다는 전제조건이 따른다. 부재 인자값(default argument)이란? 기본 인자값을 말한다 (void hehehe(int a = 1); 여기서 a가 기본 인자다. 사실 부재인자도 맞는 말이다.) 2008/07/16 15:06:11 추가, 영문 표기가 오히려, 한글 표기보다 직관적일 경우가 많이 있는것 같다. 이유 1. 부모클래스의 메소드에서 설정했던 기본 인자값으로 ... 자식클래스의 메소드에서 기본 인자값이 ... 자동 셋팅 되기 때문이다. 2008/07/16 15:06:11 수정 1. 부모 클래스에서 멤버 함수의 디폴트 매개변수는 정적바인딩 되기 때문에 동적 바인딩 되는 멤버 함수가 호출되더라도..
항목 37. 계승된 비가상 함수를 재정의하지 않도록 한다. 전제 클래스 D는 클래스 B를 계승했다. 클래스 B는 비가상함수 mf가 있다. 클래스 D는 비가상함수 mf를 재정의했다. 클래스 B형 포인터 p = new 클래스 D 이다. 이유. 1. p->mf 를 이용하면, 객체D는 정신분열적인 행동을 하게 되기 때문이다! (참조자 역활을 하는건 다 동일하다, 왜냐하면 C++의 다형성 때문이다.) 2008/07/14 14:55 수정 포인터에 정적바인딩 된다. 이 표현이 더 정확하다. 1. p->mf 를 이용하면 D의 mf 가 호출되는것이 아닌 B의 mf 가 호출된다. 이것은 장기적으로 볼때, 난해한 코딩이 되고야 만다.(디버깅이 너무 어려울듯) 2. 만약 클래스 D가 B의 mf와 다르게 해야 한다면, 상속관계..
항목 36. 인터페이스 계승과 구현의 차이점을 이해해라 2008/07/09 14:14 추가 이 이야기의 전제 조건은 어떤 클래스가 부모클래스가 될때, 그 부모클래스의 멤버 함수 선언함에 있어 주의해야 할점을 설명하는 것이다. 인터페이스 계승이란? 1. 메소드의 선언(int class::hehehe(int a); 이것을 계승한다는 뜻으로, 일종의 명령어(이런 이런 함수의 선언만 말한다)만 계승하는 것 이다. 2008/07/09 14:14 추가 2판이라 그런지 단어가 3판하고 좀 차이를 본다. 인터페이스 계승이란 함수의 정의만 계승하는것을 뜻한다. 여기서의 구현이란? 이 메소드들의 내부 동작 즉 메소드 정의(이런 이런 함수의 내부 동작을 말한다.)를 말한다. 이유 1. 각각의 차이점을 모르면 효율적인 설계를..
이유 1. public 계승이 isa를 의미하기 때문이다. 해결 방법 아래 예를 통해 어떤 뜻인지 이해 해라. class Person { .... }; class Student : public Person { .... }; is a 관계이므로 1. 학생은 사람이다. (참) 2. 사람은 학생이다. (거짓) 이게 왜 중요하냐면 void dance(const Person& p); // 사람은 춤을 출수 있다. void study(const Student& s); // 학생만 공부한다. Person p; // 사람 등장 Student s; // 학생 등장 dance(p); // 참 dance(s); // 참, 왜냐하면 학생은 사람이니까! study(p); // 거짓, 사람은 학생이 아니니까, 즉 학생만 공부한다..
최근댓글