本文为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源代码里好多都是这样实现的

Effective C++ Item 38 通过复合塑模出 has-a 或 is-implemented-in-terms-of的更多相关文章

  1. 条款38 通过复合塑膜出has-a或&quot;依据某物实现&quot;

    结论: 复合的意义和public继承全然不同. (public继承參考:条款32 确定你的public继承塑模出is-a关系) 在应用域,复合意味着has-a(有一个).在实现域,复合意味着is-im ...

  2. Effective C++ -----条款38:通过复合塑模出has-a或“根据某物实现出”

    复合(composition)的意义和public继承完全不同. 在应用域(application domain),复合意味has-a(有一个).在实现域(implementation domain) ...

  3. 【38】通过复合塑模出Has-A 或根据某物实现出

    1.什么是复合? 复合是类型之间的一种关系,某种类型的对象内含其他类型的对象. 2.为什么需要复合,他解决什么问题? 为了代码复用. 3.复合有两层含义:Has-A和根据某物实现出.在应用域中,表示H ...

  4. 读书笔记_Effective_C++_条款三十八:通过复合塑模出has-a或者is-implemented-in-terms-of

    如果说public是一种is-a的关系的话,那么复合就是has-a的关系.直观来说,复合就是在一个类中采用其他类的对象作为自身的成员变量,可以举个例子,像下面这样: class Person { pr ...

  5. 读书笔记 effective c++ Item 38 通过组合(composition)为 “has-a”或者“is-implemented-in-terms-of”建模

    1. 什么是组合(composition)? 组合(composition)是一种类型之间的关系,这种关系当一种类型的对象包含另外一种类型的对象时就会产生.举个例子: class Address { ...

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

    NOTE: 1.复合(composition)的意义和public继承完全不同. 2.在应用域(application domain),复合意味 has-a(有一个). 在实现域(implementa ...

  7. Effective JavaScript Item 38 调用父类的构造函数在子类的构造函数

    作为这一系列Effective JavaScript的读书笔记. 在一个游戏或者图形模拟的应用中.都会有场景(Scene)这一概念.在一个场景中会包括一个对象集合,这些对象被称为角色(Actor). ...

  8. Effective C++ -----条款32:确定你的public继承塑模出is-a关系

    “public继承”意味is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derive class对象也都是一个base class对象 ...

  9. [Effective C++ --032]确定你的public继承塑模出is-a

    这一章都在讲述继承的关系.可以举个例子说明: 父类是水果,子类是苹果,苹果是一种(is-a)水果,但是水果不一定就是苹果. is-a并不是唯一存在classes之间的关系.另两个常见的关系是has-a ...

随机推荐

  1. HTML5_Web_SQL_Database数据库

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAEGCAIAAAA8NNLDAAAgAElEQVR4nOxdd5hcVdk/SUgghCSEhC ...

  2. hdoj--3183--A Magic Lamp(贪心)

    A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  3. jquery操作select的各种方法

    在工作中,有时候会遇到给select组件添加一些事件,前两天发表了一篇文章,<用jquery给select加选中事件>大致阐述了简单的jq操作select的方法,但是为了详细的介绍一下se ...

  4. Nginx下部署Laravel项目

    Nginx下部署Laravel项目 标签(空格分隔): php Nginx配置文件 listen 80 default_server; #listen [::]:80 default_server i ...

  5. java9新特性-8-语法改进:钻石操作符(Diamond Operator)使用升级

    1.使用说明 我们将能够与匿名实现类共同使用钻石操作符(diamond operator) 在java8中如下的操作是会报错的:   编译报错信息:'<>' cannot be used ...

  6. win环境操作mysql

    第一步:登录数据库 第二步:查看数据库 第三步:进入数据库 第四步:创建表 第五步:删除数据库 第六步:进入数据库查看表状态

  7. windos下安装多个mysql服务

    最近需要使用Mysql制造大量数据,需要多个Mysql服务器.一开始的解决方案是使用多个windows机器.实体机不够,则用虚拟机来搞.但,,,,安装多个虚拟机…….好吧, 在网上查了下,有使用单个机 ...

  8. HNU13303 Counting substhreengs(递推)

    题目:http://acm.hnu.cn/online/? action=problem&type=show&id=13303&courseid=0 题意:给你一个字符串,由数 ...

  9. TCP/IP具体解释--TCP的分段和IP的分片

    写在前面: 分组能够发生在运输层和网络层.运输层中的TCP会分段,网络层中的IP会分片.IP层的分片很多其它的是为运输层的UDP服务的,因为TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会 ...

  10. hdoj--1342--Lotto(dfs)

    Lotto Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...