- “public继承”意味is-a。适用于base classes身上的每一件事情一定也使用于derived classes身上,因为每一个derived classes对象也都是一个base classes对象。
public继承其实是很强的约束条件,必须保证子类能够做到父类能够做到的所有事情。
- derived calsses内的名称会遮掩base classes内的名称。在public继承下从来没有人希望如此。
- 为了让被遮掩的名称再见天日,可使用using声明式或转交函数(forwarding function)。
如题
- 声明一个纯虚函数(virtual func() = 0)的目的是为了让子类只继承函数接口。
- 声明非纯虚函数(virtual func())的目的,是让子类继承该函数的接口,并缺省实现。
- 声明non-virtual函数的目的是为了让子类继承函数的接口以及一份强制性实现。
类中主要有三种函数,所有函数都指定了接口继承,非纯虚函数提供了缺省实现,非虚函数提供了强制实现
- virtual函数的替代方案包括NVI手法及Strategy设计模式的多种形式。NVI手法自身是一个特殊形式的Template Method设计模式。
- 将机能从成员函数移到class外部函数,带来的一个缺点是,非成员函数无法访问class的non-public成员。
- tr1::function对象的行为就像一般函数指针。这样的对象可接纳“与给定之目标签名式(target signature)兼容”的所有可调用物(callable entities)。
一种好的方法就是用NVI手法(模板模式),公有的接口,私有的实现,很好很完美