zoukankan      html  css  js  c++  java
  • Effective C++ Item 38 通过复合塑模出 has-a 或 is-implemented-in-terms-of

    本文为senlie原创。转载请保留此地址:http://blog.csdn.net/zhengsenlie


    经验:在应用域,复合意味着 has-a。 在实现域。复合意味着 is-implemented-in-terms-of 

    演示样例:

    template<typename T> //将list应用于 Set。错误做法
    class Set: public std::list<T> {...};

    解析:
    public 继承表示 is-a。即假设D是一种B,对B为真的每一件事。对D也应该为真。

    但list能够包括同样的元素。而Set不能够
    纠正:

    template<typename 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的数据
    };
    
    
    template<typename T>
    bool Set<T>::member(const T &item) const
    {
    return std::find(rep.begin(). rep.end(), item) != rep.end();
    }
    
    
    template<typename T>
    void Set<T>::insert(const T &item){
    if(!member(item)) rep.push_back(item);
    }
    
    
    template<typename T>
    void Set<T>::remove(const T &item){
    typename std::list<T>::iterator it = std::find(rep.begin(), rep.end(), item); //用 typename 标志嵌套从属类型名称 ?我曾经没写 typename 好像也没出现什么问题
    if(it != rep.end()) rep.erase(it);
    }
    
    
    template<typename T>
    std::size_t Set<T>::size() const{
    return rep.size();
    }


    解析:
    在STL源代码里好多都是这样实现的

  • 相关阅读:
    Python3 字典Dict(十三)
    Python3 元组Tuple(十二)
    Python3 列表List(十一)
    Python3 循环语句(十)
    Python3 条件控制(九)
    Python3 运算符(八)
    Swift3.0语法2
    Swift反射机制实现 AppDelegate 字符串获取类并成为根控制器
    Swift语法(更新)
    单例
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5155151.html
Copyright © 2011-2022 走看看