组合 composition 表示has a

queue类中有一个deque容器,这种关系叫做 组合
queue中的六个函数都是调用c的函数完成的

template <class T>
class queue {...
protected:
deque<T> c; // 底層容器
public:
// 以下完全利用 c 的操作函數完成
bool empty() const { return c.empty(); }
size_type size() const { return c.size(); }
reference front() { return c.front(); }
reference back() { return c.back(); }
//
void push(const value_type& x) { c.push_back(x); }
void pop() { c.pop_front(); }
};

图中黑色表示组合,白色表示委托

构造由内而外,析构由外而内

委托 Delegation
String类中有一个指针指向StringRep,这种关系叫 委托

继承 inheritance 表示 is a

构造先构造父类,再构造子类
析构先析构子类,再析构父类

c++面向对象高级编程 学习五 组合、委托与继承相关推荐

  1. c++面向对象高级编程 学习十五 组合继承关系下的构造和析构

    文章目录 继承关系 组合关系 继承和组合 继承关系 构造由内而外,析构由外而内,内即是父类 组合关系 A拥有B, 构造由内而外,析构由外而内,内即是B 继承和组合 构造和析构顺序如图:

  2. c++面向对象高级编程 学习十七 const, new, delete

    文章目录 常量成员函数 new和delete 常量成员函数 常量成员函数是不改变成员数据. 当成员函数的const和non-const版本同时存在时,const object只能调用const版本,n ...

  3. c++面向对象高级编程 学习十六 vptr和vtbl

    当一个类中有一个或多个虚函数时,内存中会多一个虚指针(vptr,virtual pointer),指向一个虚表(vtbl,virtual table) 父类有虚函数,则子类一定有虚函数 在下图示意图中 ...

  4. c++面向对象高级编程 学习十四 引用

    文章目录 reference reference的常见用途 reference 变量有三种形式:值,指针,引用 int x=0; //值 int* p=&x;//指向整型的指针,地址,指针在之 ...

  5. c++面向对象高级编程 学习十三 数量不定的模板参数,auto,for

    文章目录 数量不定的模板参数 auto ranged-base for 数量不定的模板参数 void print() {} //... 表示参数的数量不定 template<typename T ...

  6. c++面向对象高级编程 学习十二 模板

    模板特化: 模板是一种泛化的形式,特化是将参数类型进行指定,写出特化的版本,当在调用下图cout<<hash()(1000);的时候,由于特化中有struct hash{ }的版本,因此会 ...

  7. c++面向对象高级编程 学习十一 类模板、函数模板、成员模板

    namespace经验谈: 团队中函数或类的名字可能会冲突,因此使用namespace进行区分. 类模板: template<typename T> 函数模板: template<c ...

  8. c++面向对象高级编程 学习十 function-like classes

    本节是设计一个class,使它的行为像一个函数. 如果一个东西能接受小括号()操作符,那么这个东西就称之为函数,或像函数的东西. 下图为三个函数对()的重载,这三个类均为像函数的类,它们可接受()操作 ...

  9. c++面向对象高级编程 学习九 pointer-like classes

    c++的class设计出来有两种形式,一种像指针,一种像函数 智能指针里包含普通指针,要写 * 和 -> 的函数 sp->method(); //sp-> 经 T* operator ...

最新文章

  1. 晕死!博客园把我搞晕了!
  2. Spring Web Application Security
  3. 日常生活小技巧 -- 名词
  4. 什么是JavaConfig
  5. 简述python定义中的五个要点_Python基础知识复习
  6. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)
  7. python是免费的、开源的、跨平台的_NovalIDE是一款开源,跨平台,而且免费的国产Python IDE。...
  8. 讨教大学|FMEA成功实施的关键是什么?
  9. JAVA-反射面试题及答案
  10. 数学建模之初等模型详解
  11. 贝茨视觉训练法 (Dr William Bates)方法
  12. WIN10 下 autocad2006 及其他版本打开文件多窗口不能一个窗口的解决办法
  13. win10便签常驻桌面_有没有比较好用的电脑桌面待办事项软件?桌面便签可以了解一下...
  14. 数据结构与算法 python版 之 递归三定律
  15. 零知识证明 - bellman源码分析
  16. matlab spline三次样条插值x,Spline(三次样条插值)
  17. 多机器人路径规划CBS/ECBS等 libmultiRobotPlanning 代码阅读笔记
  18. Redis启动窗口一闪就关
  19. 串的置换操作Replace(S,T,V)的算法
  20. 用python玩转数据第一周答案_用Python玩转数据_答案

热门文章

  1. linux 故障注入_用软件中断实现的Linux内核故障注入方法
  2. 【转】浅谈TDD、BDD、ATDD、DDD的区别
  3. 【转】刨根究底字符编码之七——ANSI编码与代码页
  4. ASP.Net请求处理机制初步探索之旅 - Part 4 WebForm页面生命周期
  5. linux系统管理Linux系统实验,实验三 linux系统管理
  6. VS静态库和动态库的区别
  7. 【Python学习】 - TensorFlow.keras 不显示epochs进度条的方法
  8. 【PTA天梯赛CCCC -2017决赛L2-4】部落 (25 分)(图染色)
  9. 【HDU - 6290】 奢侈的旅行 (对题目预处理 + DIjkstra最短路)
  10. 描写火车站场景_关于描写火车站的句子