Boolan c++面向对象高级编程 第三周笔记

c/c++

浏览数:88

2019-3-28

继承&复合&委托

复合

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)

委托


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

继承

继承表示is a

继承可以继承父类的成员


继承关系下的构造函数首先调用Base的的default构造函数,然后才执行自己。
继承关系下的析构函数首先析构自己,然后才调用base的析构函数。

虚函数&多态

  1. 非虚函数是不希望子类重新定义它
  2. 虚函数是希望子类去重新定义它,并且你对它已经有了默认定义
  3. 纯虚函数是你希望子类一定要重新定义它,你对它没有默认定义。

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

委托+继承

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

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