본문 바로가기

클래스

(7)
3장, 클래스 템플릿 클래스 템플릿이란 무엇인가? 함수 템플릿 처럼, 클래스도 여러개의 데이터형으로 바뀔 수 있는 것을 말한다. 이러한 클래스 템플릿은 컨테이너류에 가장 많이 쓰이며, 대표적인 것으로는 std::vector 가 있겠다. 클래스 템플릿을 어떻게 선언하는가? template class Stack { //... }; 위에 처럼 선언할 수 있으며, typename 대신 class 를 사용 할 수 있다. 여기서 T는 멤버 함수나 멤버 변수를 선언 할 때 사용 된다. 즉, 다음과 같이 사용 될 수 있다. #include template class Stack { public: Stack(); void push(T const & ) ; void pop(); T top() const; private: std::vector e..
항목 33 : 이름 검색과 인터페이스 - 파트 3 (난이도 5) 클래스 디자인 문제인 operator
항목 10 : 생성자에서는 리소스 누수가 일어나지 않게 하자. 부제 : auto_ptr 효과적으로 사용 해라. 이유 1. 생성단계에서 동적메모리 할당시 메모리 릭이 발생할수 있기 때문이다. 구현 방법 1. 역시 메모리 할당을 auto_ptr(이런 성격의 객체)이 받으면 된다. 예) auto_ptr test; 선언 후 초기화 리스트에서 초기화! new를 호출하여 초기화 주의점 1. auto_ptr 사용시 소유권이란 개념이 분명히 존재하므로 잘 이해하고 적재적소에 써야 한다. 개인적인 생각 1. 클래스 내부에서 메모리 누수를 막는 방법이 제일 좋은것 같다. 왜냐하면 객체의 생성 자체가 메모리 할당을 동반하는 작업이 많이 때문이다. 클래스 외부에서 이런 메모리 누수처리를 한다면, 정말 힘든 세상이 될것같다. 집안 싸움은 집안에서 끝내야 한다는 속담이 떠오른다. 참조 사항..
항목 43. 다중 계승을 바르게 사용하도록 하라 항목 43. 다중 계승을 바르게 사용하도록 하라 이유 1. 모호함이 생김(항목 26) 2. 다이아몬드 형태의 계승이 이루어 지게 된다. 해결방법 1. 이유 1번을 처리하기 위한 클래스(인터페이스만을 위한)를 만들어 사용한다. 2. 가상 베이스 클래스를 선언한다..( 등등.. 너무 길다) 3. 다중 계승 .. 유혹을 피해야 한다! 개인적인 생각 필자는 다중 상속에 따라 클래스가 거대해 질수록 점점 복잡해짐을 설명하고 있다. 물론 다중상속을 해선 안된다고 말하진 않는다. 단지 복잡하다는것 뿐이다. 복잡함은 가독성을 떨어뜨리고, 코드의 수정이 더불어 복잡해 짐을 나타낸다. 나의 경우, 점점 복잡함에 따라, 피하는것이 아닌, 포기하는 것이다!
항목 41. 계승과 템플릿과의 차이점을 이해한다. 항목 41. 계승과 템플릿과의 차이점을 이해한다. 이유. 1. 코드 재사용을 위해서 (코드 재사용은 정말 중요하다. 물론 개념 재사용도 중요하다..) 해결 방법 1. 계승과 템플릿과의 차이점을 이해한다. 계승이란? 1. 다른 클래스에 있는 데이터와 메소드를 흡수하는것을 계승이라 한다. 템플릿이란? 1. 동일한 작업의 처리되는 데이터를 사용자가 지정하는 것을 템플릿 이라 한다. 어떨 때 계승과 템플릿을 구분지어 사용 하는가? 계승은 객체의 타입이 클래스에 정의된 함수들의 동작 원리에 영향을 미치는 경우 템플릿은 객체의 타입이 클래스에 정의된 함수들의 동작 원리에 영향을 미치지 않을 경우 개인적인 생각. 역시 프로그래머의 능력은 설계와 최적화에서 평가 된다. (구현은 기본이고..)
34. 파일간의 컴파일 의존성을 최소화 하라 이유 1. 사소한것만 수정해서 확인하려 하는데 너무 많은 컴파일 시간이 소비된다. 해결 방법 1. 파일간의 의존성을 최소화 한다. (제목 그대로다.. 정보는 많으므로 검색해서 기술을 익히면 된다.) 개인적 생각 Effective C++ 에서 많이 이야기 하려고 한거 같은데, 후반부에 가서 이해가 안간다. 구글에서 "파일간의 컴파일 의존성" 라고 치면 무수히 나오니 그걸 보면 .. Effective C++ 보다 더 자세히 설명 된게 많다.. 그걸 보고 파악!
항목 11. 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라 항목 11. 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라 이유 1. 복사된 대상의 포인터의 값을 복사하기 때문이다. 해설 복사된 대상의 포인터 값만을 복사해서도 사용 가능하지만, 해체시 오류가 발생될수 있으므로 복사 생성자와 치환연산자를 깊은 복사로 하라는것 이다. 2008/06/02 14:00 수정 하라는것이 아닌, 작동 상태에 대해서 어떻게(얕은복사 깊은복사 등) 고려해 보라는 뜻 해결 방법 1. reference counting 을 사용하여, 0일경우 지우는 방법 - 객체를 복사할때 와 지울때마다 카운팅 하여, 0이 되면 삭제하는 방법이다. 2. 깊은복사를 위하여 복사생성자와 치환연산자를 변경하라 3. 복사 생성자와 치환연산자를 private: 에 묶어 버..