1. 复合(composition)的意义和 public 继承完全不同。
2. 在应用域(application domain),复合意味 has-a (有一个)。在实现域(implcmentation domain),复合意味 is-implemented-in-terms-of(根据某物实现出)。
复合(composition)是类型之间的一种关系,当某种类型的对象内含它种类型的对象,便是这种关系。例如:
class Address { ... };
class PhoneNumber { ... };
class Person {
public:
...
private:
std::strng name; // 合成成分物
Address address; // 同上
PhoneNumber voiceNumber; // 同上
PhoneNumber faxNumber; // 同上
};
本例之中 Person 对象由 string、Address、PhoneNumber 构成。
条款32提到,“public 继承”意味者 is-a(是一种)的意义。复合(composition)也有它自己的意义,它意味着 has-a(有一个)或 is-implemented-in-terms-of(根据某物实现出)。
用 list 对象来实现 set 的功能是 is-implemented-in-terms-of 的一个案例:
tmplate<class T>
class Set {
public:
bool member(const T& item) const;
void insert(const T& item);
void remove(const T& item);
std::size_t size() const;
private:
std::list<T> rep; // 用来表述Set的数据
};
评论区