首页 理论教育C++程序设计基础教程-继承的概念及汽车层次关系图

C++程序设计基础教程-继承的概念及汽车层次关系图

【摘要】:图6.1汽车层次关系图这个分类树反映了交通工具的继承与派生关系,最高层是抽象程度最高的,最具有普遍和一般意义的概念,下层具有了上层的特性,同时加入了自己的新特征,而最下层是最为具体的。在面向对象的程序设计中,类型表示为类,类与类之间通过继承关系组成的层次结构称为类层次。被继承的类称为基类、父类或超类,新的类为派生类或子类。

在日常生活中,常用“是一种(is-a)”关系来组织与表达知识,从而将知识组织成一种有层次、可分类的结构。例如,本科生是学生,人是一种动物等。

这种层次结构的分类方法应用十分广泛,如交通工具汽车火车、飞机、轮船等,而汽车又分为卡车、旅行车、小汽车等,小汽车又包括工具车、轿车、面包车等。如图6.1所示。从图中可以看出,is-a关系是一种继承关系。

图6.1 汽车层次关系图

这个分类树反映了交通工具的继承与派生关系,最高层是抽象程度最高的,最具有普遍和一般意义的概念,下层具有了上层的特性,同时加入了自己的新特征,而最下层是最为具体的。在这个层次结构中,从上到下是一个具体化、特殊化的过程;由下到上,是一个抽象化的过程。

在理解这种层次关系时要注意几个概念,一种是类型,类型是个体的集合,图6.1中,火车、汽车、飞机、公共汽车等都是类型;另一种是个体,如206路公共汽车等。

在面向对象的程序设计中,类型表示为类,类与类之间通过继承关系组成的层次结构称为类层次。如果类B继承类A,就画一条箭头从类B的节点指向类A的节点,并且将父类放在上面,子类放在下面。

is-a关系和第2章介绍的has-a关系是类之间的基本关系,但两者是有区别的。如果类B继承类A,则B与A之间是一种is-a关系;如果类B的定义中将类A的对象作为数据成员,则B与A之间是一种has-a关系。

继承关系具有双重作用:(www.chuimin.cn)

(1)作为类的构造机制,继承通过扩充、组合现有的类来构造新的类。扩充是指形成现有类的特例——派生类,组合是指抽取出若干现有类的共性形成新的抽象层次——基类。

(2)作为类型的构造机制,如果类B继承类A,则所有要求对象A类型的地方也可以接受B类型的对象。正如,“公共汽车”是一种“汽车”,所有出现“汽车”的地方用“公共汽车”来代替是合理的,但反之不然,出现“公共汽车”的地方不一定能用“汽车”代替。

通过继承可对类分层,C++通过类的派生机制来支持继承。被继承的类称为基类、父类或超类,新的类为派生类或子类。

在派生过程中,派生出来的新类同样可以作为基类再继续派生出更新的类,依此类推形成一个层次结构。直接参与派生出某类称为直接基类,而基类的基类,以及更深层的基类称为间接基类。

继承反映了事物之间的联系,事物的共性与个性之间的关系。继承与独立设计类相比,前者工作量少,重复的部分可以从基类继承来,不需要单独编程实现代码复用。所以继承为程序代码的重用提供了重要的技术实现手段。

注意:第2章介绍了has-a关系,它表示“有一个对象”关系,而is-a表示“是一个对象”关系,要注意两者的差别,前者是一个组合关系,在这种关系中,一个类的对象拥有作为其成员的其他类的对象;后者是一种继承,派生类的对象也以作为基类的对象处理。