C++中的继承和派生详解

C++中的继承和派生详解

ID:40800786

大小:662.00 KB

页数:75页

时间:2019-08-07

C++中的继承和派生详解_第1页
C++中的继承和派生详解_第2页
C++中的继承和派生详解_第3页
C++中的继承和派生详解_第4页
C++中的继承和派生详解_第5页
资源描述:

《C++中的继承和派生详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第7章继承和派生从已有的对象类型出发建立一种新的对象类型,使它继承原对象类型的特点和功能,这种思想是面向对象设计方法的主要贡献。通过对已有类进行特殊化(派生)来建立新的数据类型,就使得面向对象语言具有极大的能力和丰富的表现力。从概念上讲,类的派生创建了一种软件结构,它真实地反映了实际问题。从软件角度来看,类的派生创建了一种类族。派生类的对象也是基类的一种对象,它可以被用在基类对象所使用的任何地方。可以用多态成员函数仔细调整这种关系,以便使派生类在某些地方与它的基类一致,而在别的地方表现出它自身的行为特征。本章主要讨论C++语言继承方面的

2、语法特征和一般的使用方法。主要内容7.1继承和派生的基本概念7.2单一继承7.3多重继承7.4二义性及其支配规则7.5设计实例7.1继承和派生的基本概念派生和继承的概念也来自于人们认识客观世界的过程。举个简单的例子:“狗”和“黑狗”。当谈论“狗”的时候,知道它是哺乳动物,有4条腿,1条尾巴,喜欢啃肉骨头,……。现在谈论“黑狗”,人们会怎么说呢?当然可以说:“黑狗是一种哺乳动物,有4条腿,1条尾巴,喜欢吃肉骨头,……,并且它的毛是黑色的”。但是人们一般都不这么说,而是说:“黑狗就是黑毛的狗”。比较一下这两种说法,显然后一种说法更好。那

3、么它好在哪里呢?第一,它更简炼;第二,更重要的是它反映了“狗”和“黑狗”这两个概念的内在联系。“狗”和“黑狗”之间存在一条重要的联系,那就是所有的“黑狗”都是“狗”,或者说,“黑狗”是一类特殊的“狗”。根据这一条,“狗”所具有的特征,例如4条腿,1条尾巴等,“黑狗”自然都具有。也就是说,“黑狗”从“狗”那里继承了“狗”的全部特征。现在我们用C++语言来描述这一问题。显然可以定义一个描述“狗”的类dog。但是描述“黑狗”的类blackdog怎么办?为了能准确地描述这两个类之间的关系,C++提供了一种机制,使得人们可以像“黑狗就是黑毛的狗”

4、那样定义一个新类blackdog。在这种机制下,类blackdog自动拥有类dog的所有成员,该类的每一个对象都是类dog的对象,也就是说,“每一条黑狗都是狗”。这种机制的具体实现留到下一节再说。这一节的主要任务是弄清楚基本概念。现在先来看几个术语。首先,“黑狗是黑毛的狗”是从一般的dog类通过特殊化而得到类blackdog的。这种通过特殊化已有的类来建立新类的过程,叫做“类的派生”,原有的类叫做“基类”,新建立的类则叫做“派生类”。这里类dog就是基类,而blackdog是派生类。另一方面,从类的成员的角度看,派生类自动地将基类的所有

5、成员作为自己的成员,这叫做“继承”。基类和派生类又可以分别叫做“父类”和“子类”,有时也称为“一般类”和“特殊类”。类的派生和继承是面向对象程序设计方法和C++语言最重要的特征之一。首先,客观世界本身是有层次的,人们认识客观世界的过程中,由一般到特殊的演绎思维发挥着巨大作用。演绎的过程在绝大多数情况下就表现为层次分类的过程。继承使得程序员可以在一个较一般的类的基础上很快地建立一个新类,而不必从零开始设计每个类。从一个或多个以前定义的类(基类)产生新类的过程称为派生,这个新类称为派生类。派生的新类同时也可以增加或重新定义数据和操作,这就产

6、生了类的层次性。类的继承是指新类继承基类的成员。继承常用来表示类属关系,不能将继承理解为构成关系。当从现存类中派生出新类时,可以对派生类做如下几种变化:①可以增加新的数据成员;②可以增加新的成员函数;③可以重新定义已有的成员函数;④可以改变现有成员的属性。如图7.1所示,C++中有两种继承:单一继承和多重继承。对于单一继承,派生类只能有一个基类;对于多重继承,派生类可以有多个基类。图7.1类的单一继承和多重继承的UML结构图在图7.1中,箭头指向基类。单一继承形成一个倒挂的树。派生类继承了基类所有的数据成员和成员函数,程序员也可以在派生

7、类中添加新的数据成员和成员函数。这样,基类定义了对象的一个集合,派生类通过增添新的成员限制基类的定义,以便定义基类对象集合的一个子集。由此可见,从编码角度讲,派生类从基类中以较低代价换来了大量的灵活性。一旦产生了可靠的基类,只需要调试派生类中所做的修改即可。C++派生类从父类中继承性质时,可使派生类扩展它们,或者对其做些限制,也可改变或删除,甚至不作任何修改。所有这些变化可归结为两类基本的面向对象技术。第一种称为性质约束,即对基类的性质加以限制或删除。第二种称为性质扩展,即增加派生类的性质。7.2单一继承7.2.1单一继承的一般形式在

8、C++中,声明单一继承的一般形式为:class派生类名:访问控制基类名{private:成员声明列表protected:成员声明列表public:成员声明列表};这里和一般的类的声明一样,用关键字cl

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。