[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "
" is-a 관계와 has-a / is-implemented-in-terms-of 관계의 차이점을 이해하자!"
- 객체 합성의 의미는 public 상속이 가진 의미와 완전히 다르다!
- 응용 영역에서 객체 합성의 의미는 has-a, 구현 영역에서 객체 합성의 의미는 is-implemented-in-terms-of!
class Address { ... };
class PhoneNumber { ... };
class Person
{
public:
...
private:
string name;
Address address;
PhoneNumber voiceNumber;
PhoneNumber faxNumber;
};
어떤 타입의 객체들이 그와 다른 타입의 객체들을 포함하고 있을 경우 성립하는 관계
- Person 객체는 string, Adress, PhoneNumber로 이루어짐
레이어링, 포함, 통합, 내장 등으로도 알려져 있음
[ 예시 ]
중복 원소가 없는 집합체를 나타내고 = set
저장 공간도 적게 차지하는 클래스의 템플릿이 필요! = list
...
...
...
set과 list로 구현 해보자!
template<typename T>
class Set : public list<T>
{
...
};
- is-a 관계이기 위해서는 list에서 참인것들이 set에서도 모두 참이어야 함, 하지만 set은 중복원소를 가지면 안되지만 list는 중복원소를 갖을 수 있다...
template<class T>
class Set
{
public:
bool member(const T& item) const;
void insert(const T& item);
void remove(const T& item);
size_t size() const;
private:
list<T> rep;
};