본문 바로가기

2018/047

[Effective C++] 항목 47~49 항목 47: 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자. STL 반복자 5종류-입력 반복자; 전진만 가능, 한번에 한칸, 읽기 한번만 가능(istream_terator)-출력 반복자; 전진만 가능, 한번에 한칸, 쓰기 한번만 가능(ostream_terator)-순방향 반복자; 입력반복자 + 출력반복자(TR1의 해시컨테이너, slist(단일 연결리스트))-양방향 반복자; 순방향 반복자 + 뒤로 가기 가능(list, set, map 등)-임의 접근 반복자; 반복자 산술연산 가능( 가장 강력, vector. deque, string 등) 임의 접근 반복자만 산술 연산 가능.ex) 지시자 +=2.-> 다른애들도 산술연산 가능하도록 템플릿으로 만들어 준다. templatevoid advance(It.. 2018. 4. 10.
[Effective C++] 항목 44~46 항목 44 : 매개변수에 독립적인 코드는 템플릿으로부터 분리시키자 * 아무 생각 없이 템플릿을 사용하면 템플릿의 적, 코드 비대화를 초래 - 똑같은 내용의 코드와 데이터가 여러 벌로 중복되어 이진 파일로 구워진다. * 공통성 및 가변성 분석(Commonallity and variabliity) 1) 함수 : 두 함수를 분석해서 공통적인 부분과 다른 부분을 찾은 후에 공통 부분은 새로운 함수에 옮기고 다른 부분은 원래의 함수에 남겨둔 것이다. 2) 클래스 : 공통 부분을 별도의 새로운 클래스에 옮긴 후, 클래스 상속 혹은 객체 합성을 사용해서 원래의 클래스들이 공통 부분을 공유하도록 한다. 원래의 두 클래스가 제각기 갖고 있는 다른 부분은 원래의 위치에 남아 있게 된다. 3) 템플릿 : 똑같은 방법으로 코.. 2018. 4. 10.
[Effective C++] 항목 41~43 항목 41. 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터 class Widget {public:widget();virtual ~Widget();virtual std::size_t size() const;virtual void normalize();void swap(Widget& other);...} void doProcessing(Widget& w){if(w.size() > 10 && w != someNastyWidget){Widget temp(w);temp.normalize();temp.swap(w);}} * w 는 Widget 타입으로 선언되었기 때문에, w 는 Widget 인터페이스를 지원해야한다. * Widget 이 선언된 헤더파일등에서 어떤 형태인지 알수 있으므로 명시.. 2018. 4. 10.
[Effective C++] 항목 38~40 항목 38. "has-s(...는...를 가짐)" 혹은 "is-implemented-in-terms-of(...는..를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자 합성이란?- 포함된 객체들을 모아서 이들을 포함한 다른 객체를 합성한다는 뜻. class Adress {...}; //누군가의 거주지class PhoneNumber{...};class Person{ public: ... private: std::string name; //이 클래스를 이루는 객체 중 하나 Adress adreess; //마찬가지 PhoneNumber voiceNumber; //역시 마찬가지 PhoneNumber faxNumber; //이것도 마찬가지}; Person 객체는 string, Address, PhoneNum.. 2018. 4. 10.