条款35: 使公有继承体现 “是一个” 的含义
用代码说明本概念
class Person { ... };
class Student: public Person { ... };
没有任何一种设计可以理想到适用于任何软件。
好的设计是和软件系统现在和将来所要完成的功能密不可分的(参见条款M32)。
数据结构与算法与问题本身是强相关的,还有硬件设计,现在还得考虑面向编译器、面向环境编程(eg:cpu的指令集)。
在编译时检测错误比在运行时检测错误有某些技术上的优点,详见条款46。
条款36: 区分接口继承和实现继承
继承由两个可分的部分组成:函数接口的继承和函数实现的继承。函数声明和函数定义。
定义纯虚函数的目的在于,使派生类仅仅只是继承函数的接口。
协议类(Protocol class),它为派生类仅提供函数接口,完全没有实现。
声明简单虚函数的目的在于,使派生类继承函数的接口和缺省实现。
声明非虚函数的目的在于,使派生类继承函数的接口和强制性实现。编译期确定调哪个函数。