文档介绍:继承的概念
抽象和分类
继承的实现
继承中的成员重定义
继承下的类域
组合的概念
派生类和组合类对象的构造
模板类的继承关系
基类和派生类的指针
本章要点
练习
对象就是一件事物,类就是针对一些事物共性的概括。不同的类经常具有相似的特征。为了充分利用对象之间的关系,就引进了继承的概念。继承(inheritance)是允许通过重用现有类来构建新类的特性。 我们来看一下实际生活中的继承,如图6-1所示。假如已经定义了“人”,在需要说明什么是“教师”时,只需在“人”的基础上增加“教书”这一行为即可,即教书的人,而不必从头说明什么是人。若想进一步说明“男教师”,只需在“教师”的特征中增加“男性”这一特征即可。
继 承 的 概 念
图6-1 继承关系图
C++中的继承是在现有的类的基础上建立一个新类。原类称为“基类”、“父类”或“超类”,新建类称为“派生类”或“子类”。子类继承父类的所有行为和特征。 在图6-1中的人是学生的基类,学生是大学生的基类。或者说,学生是人的派生类,大学生是学生的派生类。继承关系中的大学生有两个基类,学生是它的直接基类,人是它的间接基类。
在对事物的描述中,正确地使用继承与组合能带来层次分明、结构清晰的效果,这就要求我们对具体问题进行具体分析和研究,进而进行抽象和分类。 抽象是要找出事物的共同特性和方法,是具体事物描述的一个概括。抽象的目的就是能实现层层继承。分类就是要找出事物实体的各自特性和方法。它使概念逐渐细化,即具体化。分类的目的就是能实现对类的正确描述。下面通过图6-2中对交通工具的描述,来表现抽象和分类的关系。其中,从上向下是分类的过程,从下往上是抽象的过程。
抽 象 和 分 类
图6-2 抽象和分类的关系示意
从分类的角度看,交通工具类可分为轮船、飞机和车,车又分为汽车和人力车。其中汽车的行为是可运输,特征是燃油和有车轮。汽车又可分为卡车和小汽车等。卡车的特征是载货,小汽车的特征是载人。 从抽象的角度看,在对小轿车类的描述中,展现出所有小轿车都有一个共性:体积小,可载人。对小轿车进行抽象可得到:小轿车是小汽车中的一种,它可以继承小汽车,它自身的特征是比小汽车更舒适、速度更快等。
面向对象的程序设计中,对象被抽象成类,类又是层层分解的,这些类与派生类的关系可以被规格化描述。描述类后再描述其派生类,就可以只描述其增加部分。所有派生类层次上的编程,都只需在已有类的基础上进行。派生类继承基类定义的所有成员并添加自己的独特成员从而形成一个新类,这样使得各类之间既有共性又有个性,使各类看似相似却又是各个独立的类。 进行抽象和分类的方法主要从行为和特性两方面考虑,从中找出个性与共性,以及它们之间的关系。这部分工作的好坏直接关系到程序的优劣,因而要求在实践中不断总结和积累经验。
建立继承的方法 在继承关系中,派生类继承基类定义的所有成员并添加自己的独有成员。通过继承可以实现类库的重用性,有效地利用现有的类,既使程序结构合理、层次清晰,对对象的描述符合实际,又可缩短程序的开发时间。建立继承的方法是: class派生类名:(冒号)引用权限类派生表
继 承 的 实 现
其中,引用权限有public、protected和private。若不指定引用权限,则为默认的方式,即private。类派生表就是指定的基类。指定的基类必须首先定义,方可被指定。 如对于上面提到的小轿车继承小汽车,可以用下面的方法实现。