1. public继承体现is-a关系,要求接口的完全继承,而复合体现has-a或"根据某物实现出"的关系.

    当复合发生在应用域(世界中的某些事物,如人,汽车,一张剪辑视频画面等)内的对象之间,表现出has-a关系,当发生在实现域(细节上的人工制品,如缓冲区,互斥器,查找树等)内,表现出is-implementation-in-terms-of(根据某物实现出)的关系.

2. 对于is-implementation-in-terms-of,例如基于list实现set(当空间比时间更重要的时候可能这样做),那么使用public继承显然是不合适的,因为list可以进行的操作set未必允许(例如拥有两个相同元素),因此可以使用复合,:

template<Set>
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;
}
//具体实现略
View Code

相关文章:

  • 2021-12-25
  • 2021-06-15
  • 2021-08-31
  • 2021-08-12
  • 2021-08-04
  • 2021-11-19
  • 2021-12-09
  • 2021-07-20
猜你喜欢
  • 2021-12-26
  • 2021-11-15
  • 2021-06-09
  • 2022-03-05
  • 2022-02-12
  • 2021-07-01
  • 2022-12-23
相关资源
相似解决方案