C++ 继承:扩展类的强大工具
1. 什么是继承
人类智力的一个基本方面是寻找、识别和创建概念之间的关系。我们构建层次结构、网络和其他相互关系来解释和理解事物的交互方式。在 C++ 中,继承体现了这种思想,使得一个类可以从另一个类继承。
概念可以有多种分类方式。以狗为例,生物学家看到的是相互作用的器官网络,物理学家看到的是原子和力的作用,分类学家看到的是家犬物种的代表,而孩子看到的是伙伴和保护者。
分类学家将生物世界分为界、门、纲、目、科、属、种。狗属于犬科,犬科属于哺乳动物,哺乳动物属于动物,以此类推。这种分类建立了 “is a” 关系,例如狗是犬科动物,日产聆风是一种汽车,汽车是一种交通工具,奶油甜馅煎饼卷是一种甜点,甜点是一种食物。
当某物被描述为另一种事物的一种时,意味着它是该事物的特化。汽车是一种特殊的交通工具,汽车和公共汽车都是交通工具,它们有各自的特点,但也有一些共同之处。
在 C++ 中,继承用于表达这些关系。狗的概念继承了哺乳动物的所有特征,因为它是哺乳动物,所以会移动和呼吸空气。狗还增加了吠叫、摇尾巴等特征。狗既有狗特有的特征,也有所有哺乳动物共有的特征。
C++ 通过定义相互派生的类来表示这些关系。派生是表达 “is a” 关系的一种方式。可以从 Mammal 类派生一个新的 Dog 类,不必明确声明狗会移动,因为它从 Mammal 类继承了这个特性。
一个为现有类添加新功能的类被称为从原始类派生。原始类被称为新类的基类。如果 Dog 类从 Mammal 类派生,那么 Mammal 是 Dog 的基类。派生类是其基类的超集,就像现实世界中狗为哺乳动物的概念添加了某些特征一样,Do