侧边栏壁纸
博主头像
如此肤浅

但行好事,莫问前程!

  • 累计撰写 52 篇文章
  • 累计创建 6 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

条款38 通过复合塑模出 has-a 或“根据某物实现出”

如此肤浅
2022-06-08 / 0 评论 / 0 点赞 / 22 阅读 / 753 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-06-08,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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的数据
};
0

评论区