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实现出来"的.

  • 相关阅读:
    二分 || UOJ 148 跳石头
    等边n边型
    激光样式
    n个数中选k个数和为sum
    引爆炸弹
    光盘行动
    (二分)分蛋糕问题
    总结
    个人测试
    第三次团队作业
  • 原文地址:https://www.cnblogs.com/reasno/p/4799199.html
Copyright © 2011-2022 走看看