面向对象的三种关系
一、继承
继承可以i表示为 is-a
public/private/protected 继承方式
构造先父类构造, 后子类, 析构子类先析构, 父类再析构
base class的dtor必须时virtual
二、复合 composition
继承可以表示为 has-a
构造由内到外, 析构由外到内
Adaptor, 可以通过复合方式实现
三、委托 composition by reference
handle /body, pimpl
复合包含使用类的实体, 委托只包含他的指针
四、多态:
1 带有virtual的继承
1) non-virtual函数 : 不希望derived class 重新定义(override)
2) virtual 函数 : 希望derived class 重新定义(override)
3) pure virtual 函数: 希望derived class 必须重新定义
Template method application framework 将实现延迟到子类中实现
子类再调用父类函数时, 将this 指针传入, 在父类函数执行其他函数是通过this指针调用,从而实现了实现的延时
五、继承复合委托组合情形:
1) 继承+复合
derviced 类中组合component时 构造析构的执行顺序
在VS/gcc 下试验了一下, 子类含复合类, 构造执行顺序是
base
component
derived
析构顺序刚好相反
2) 委托+继承 observer 通过外部类观察一个类的变化
3) 委托+继承 composit 包含简单和复杂的类(不可以使用纯虚函数)
4)委托+继承 prototype 创建未来要涉及的类,构造函数私有(需要通过原型创建)
每一个子类自己有子一个个体, 有一个构造函数将个体挂载到父类, 每一个子类有个clone,框架端可以通过clone生成子类的副本
(class静态data 要在class 外进行一次定义)