文章目录
条款32:确定你的public继承塑模出is-a关系
请记住
- “public继承”意味is-a。适用于base classes身上的每一件事情一定也使用于derived classes身上,因为每一个derived classes对象也都是一个base classes对象。
我的理解
public继承其实是很强的约束条件,必须保证子类能够做到父类能够做到的所有事情。
条款33:继承时不要起和父类相同的名称
请记住
- derived calsses内的名称会遮掩base classes内的名称。在public继承下从来没有人希望如此。
- 为了让被遮掩的名称再见天日,可使用using声明式或转交函数(forwarding function)。
我的理解
如题
条款34:区分接口继承和实现继承
请记住
- 声明一个纯虚函数(virtual func() = 0)的目的是为了让子类只继承函数接口。
- 声明非纯虚函数(virtual func())的目的,是让子类继承该函数的接口,并缺省实现。
- 声明non-virtual函数的目的是为了让子类继承函数的接口以及一份强制性实现。
我的理解
类中主要有三种函数,所有函数都指定了接口继承,非纯虚函数提供了缺省实现,非虚函数提供了强制实现
条款35:考虑virtual函数以外的其它选择
请记住
- virtual函数的替代方案包括NVI手法及Strategy设计模式的多种形式。NVI手法自身是一个特殊形式的Template Method设计模式。
- 将机能从成员函数移到class外部函数,带来的一个缺点是,非成员函数无法访问class的non-public成员。
- tr1::function对象的行为就像一般函数指针。这样的对象可接纳“与给定之目标签名式(target signature)兼容”的所有可调用物(callable entities)。
我的理解
一种好的方法就是用NVI手法(模板模式),公有的接口,私有的实现,很好很完美
本文详细阐述了面向对象编程中的继承原则,强调public继承建立is-a关系的约束,提醒避免子类与父类同名导致的名称遮掩问题。同时,区分了接口继承和实现继承,讨论了virtual函数的使用及其替代方案,如NVI模式和Strategy设计模式。通过这些策略,可以更好地设计和优化类的继承结构和行为。
1540

被折叠的 条评论
为什么被折叠?



