public 상속이나 protected 상속, private 상속일 때, 인터페이스(접근 할 범위)가 어떻게 바뀌는지 안다는 전제하에서 이야기를 진행한다. private 상속은 (is-implemented-in-terms-of) 패턴을 뜻한다. 즉, ...는 ...를 써서 구현되었다 라고 할수 있다. 38항목에 자세하게 적어 두었으니 읽어 보면 도움이 될 듯 하다. 자 소스 코드가 있어야 이해가 될듯 하여, 소스코드를 포함한다. #include class Ctest { protected: Ctest( ) : a( 1 ) { std::cout
분류 전체보기 검색 결과
저번장까지는 설계에 관한 이야기보다는 상속시 유의해야 되는 부분이 강조되었다면, 이번 항목은 .. 설계에 관한 부분이다. 나는 지금까지 private 상속이면 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 이고 클래스 내부에서 객체선언하면 "has-a(...는...를가짐)" 이다 라고 이해했지만, 이것은 잘못된 이해이다. 각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다. 그렇다면 다시 제목을 봐보자.. 항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 ..
2008/07/18 - [IT 전뇌실/Effective STL 초판] - 항목 19 : 상등 관계(equality)와 동등 관계(equivalence)의 차이를 파악하자 에서 상등 관계와 동등관계를 정리해 둔것이 있었다. 연관 컨테이너(Associative Containers)에 값을 넣을 때는 그 연관 컨테이너가 어떤 연관순서로 정렬이 되는지 동등관계의 비교타입을 정의해 두어야 한다. 하지만 포인터를 넣는 연관컨테이너는 어떻게 될까? 이 경우에 포인터의 비교타입을 정해두지 않는 다면, 포인터의 동등(equibelence)관계로 정렬이 되기 때문에 원하는 정렬을 하지 못한다. 실험 코드를 준비 했다, 메모리 누수는 .. 알아서 대처 하도록 #include int main(void) { std::set c..
항목 19부터는 STL 연관 컨테이너(Associative Containers)에 대한 이야기이다. 어떻게 이해하는게 좋을까 고민하다가 한가지 묘안이 떠올랐다. 예로써 감을 잡는 방법을 쓴다. 연관컨테이너에서의 1. 상등(equality)은 "값이 같은가?" 이고, 동등(equivalence)는 "위치가 같은가?" 로 풀이가 된다. 2. 상등은(equality) operator== 으로 판별하고 동등(equivalence)은 operator 3. 말로 하자면, 상등한 값이냐?, 동등한 위치냐? 4. 상등(equality)은 "같다, 틀리다" 로 표현되고, 동등(equivalence)은 "크냐? 작냐?" 로 표현된다. 이 정도로 이야기를 하면 어느정도 이해가 될 것이다. 이게 왜 중요..
vector에, bool을 넣어 사용하지 말라는 뜻으로 이해 하고 넘어가도 되는 장이지만, 왜 그런지 알아둘 필요가 있기에 간략한 설명을 한다. 설명에 들어가기 앞서, 코드를 포함하여, 설명을 한다. #include #include int main(void) { std::vector Dst;// Dst 생성 Dst.push_back(1);// 참값 넣음 Dst.push_back(1);// 참값 넣음 Dst.push_back(0);// 참값 넣음 bool pb = Dst[0];// .. 이건 되지만 bool *pbb = &Dst[0];// .. 이건 되지 않는다, 컴파일 해 보면 알수 있다. } 여기서 보았을때 bool 은 정상적으로 작동이 되지 않을것이며, 맨 끝에 라인에서 컴파일 타임 에러가 날 것이다..
이번 항목은 swap 에 대한 기본 지식이 필요로 한다. swap 에 관련된 Effective C++ 25항목 참조 하면 좋을듯 싶고, 형변환은 그 객체의 사본을 만든다는 것도 알아두면 이번장도 어려운것은 없다. #include int main(void) { std::vector Dst; // Dst 생성 Dst.capacity(); // 기본적인 용량 확인 Dst.push_back(3); // 넣고 Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity(); // 확인 Dst.push_back(3); Dst.capacity..
최근댓글