继承&复合&委托
复合
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,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类(框架)使用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。