c++面向对象高级编程 第四周学习笔记

继承&复合&委托

复合

template<class T,class sequence=deque<T> >
class queue{
...
protected:
    seqence c;
public:
    //如下彻底利用c的操做函数完成
    bool empty() const{return c.empty();}
    ...
};

在上文中 复合表示的关系为has-a
queue中的内容所有由deque来实现
因为复合表示的是一个has-a的关系,因此其大小为其内部各部分之和。框架

复合关系下的构造和析构

在构造时,复合关系的构造是由内而外,先执行内部构造函数,再执行外部。
而析构时正好相反,析构先执行本身,再执行内部的析构函数。
(Base class 的dtor必须是virtual,不然会出现undefined behavior)函数

委托

clipboard.png
这种利用另外一个类的指针调用实现功能调用叫委托。spa

继承

继承表示is a指针

clipboard.png

继承能够继承父类的成员code

clipboard.png
继承关系下的构造函数首先调用Base的的default构造函数,而后才执行本身。
继承关系下的析构函数首先析构本身,而后才调用base的析构函数。继承

虚函数&多态

  1. 非虚函数是不但愿子类从新定义它
  2. 虚函数是但愿子类去从新定义它,而且你对它已经有了默认定义
  3. 纯虚函数是你但愿子类必定要从新定义它,你对它没有默认定义。

继承+复合下的构造前后问题

clipboard.png

委托+继承

clipboard.png

clipboard.png

观察者模式
1,A类有委托容器。
2,A类的容器包含一个能够继承的B类。
3,B类可扩展。
4,A类可控制,让B类有需求的来注册,注销。
Composite
1,B类有个容器,能够放左边,能够放右边。
2,A类作基类,让左右两边都继承。
3,B类的容器指针指向A类,B类Add控制放左仍是放右。ip

clipboard.png

Prototype(Design Patterns Explained Simply)
1,A类建立未知的子类,
2,让B类建立静态本身,
3,B类构造是private,原型放到A类的容器(add),
4, B类clone来实现挂到A类框架,扩展A类(框架)使用。原型

clipboard.png

相关文章
相关标签/搜索