zoukankan      html  css  js  c++  java
  • Effective C++ 条款38 通过复合塑模出has-a或"根据某物实现出"

    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

    以上例子中set对象就是"根据list实现出来"的.

  • 相关阅读:
    P2168 [NOI2015]荷马史诗
    P3195 [HNOI2008]玩具装箱TOY
    P1972 [SDOI2009]HH的项链
    P2339 提交作业usaco
    P3974 [TJOI2015]组合数学
    P2831 愤怒的小鸟
    [校内模拟题4]
    P3952 时间复杂度
    P3531 [POI2012]LIT-Letters
    2019.10.1 qbxt模拟题
  • 原文地址:https://www.cnblogs.com/reasno/p/4799199.html
Copyright © 2011-2022 走看看