函数分为三类:
- non-virtual 函數:你不希望derived class 重新定義(override, 覆寫) 它.
- virtual 函數:你希望derived class 重新定義(override, 覆寫) 它,且你對它已有默認定義。
- pure virtual 函數:你希望derived class 一定要重新定義(override 覆寫)它,你對它沒有默認定義
举例,父类:形状,子类:三角形、四边形等
- 画图是纯虚:因为形状无法定义画图
- 打印错误信息:子类自己决定使用默认定义还是重新定义
- ID:由父类统一分配
Template Method设计模式
父类先把能实现的都实现了,通过子类对象调用父类函数,将某一关键动作延缓到子类中去实现
继承+复合关系下的构造和析构
- 派生类中存在复合关系:
前后次序自己写cout输出观察、
- 父类中存在复合关系:
前后次序显而易见:
-构造由内而外:Derived 的構造函數首先調用Base 的default 構造函數,
然後調用Component 的default 構造函數,然後才執行自己。(why?
Derived::Derived(...): Base, Component() {...};
-析构由外而内:Derived 的析構函數首先執行自己,然後調用Component 的析構函數,然後調用Base 的析構函數。
Derived::~Derived(...){... ~Component(), ~Base()};
委托+继承
observer设计模式
举例:office软件中打开多模式窗口,要求改动可以在各个窗口间同步
左边委托给observer,而observer作为父类可被继承
内容物(observer)在构造函数中通过attach注册到subje
notify:遍历所有observer,更新数据