版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章继承和派生从现有对象类型创建新对象类型,继承原对象类型的特征和功能的思想是面向对象设置修订方法的主要贡献。 将现有的类特殊化(派生)创造新的数据类型,使面向对象语言具有很大的能力和丰富的表现力。 从概念上说,类的派生创建了实际反映实际问题的软件结构。 从软件的角度来看,类派生创建类族。 派生类的对象也是基类的对象,可以在基类的对象使用的任何位置使用。 您可以使用多态成员函数精细调整此关系,以便派生类在一个位置与其基类匹配,并在另一个位置表示自己的行为特征。 本章主要讨论c语言继承中的语法特征和一般用法。 主要内容是7.1继承和派生的基本概念7.2单一继承7.3多重继承7.4二义性及其支配
2、规则7.5设置修订例,7.1继承和派生的基本概念派生和继承的概念也来源于认识客观世界的过程。 举个简单的例子吧。 “狗”和“黑狗”。一说到“狗”,就知道是哺乳动物,喜欢四条腿,一条尾巴,啃肉骨头。 现在正在谈论“黑狗”,人们会怎么说呢? 当然可以说“黑狗是哺乳动物,四条腿,一条尾巴,喜欢肉骨,它的毛是黑色的”。 但是,人们一般不是这么说的,而是说“黑狗是黑毛狗”。 比较这两种说法,显然后者比较好。 那么哪里好呢? 第一,更简单。第二,更重要的是反映了“狗”和“黑狗”两个概念的内在联系。 “狗”和“黑狗”之间有着重要的联系。 那就是,所有的“黑狗”都是“狗”,或者“黑狗”都是特殊的“狗”。 据此
3、,“狗”具有的特征是,例如4条腿、1条尾巴等,“黑狗”自然具有。 也就是说,“黑狗”从“狗”继承了“狗”的所有特征。 我用c语言说明这个问题。 显然,可以定义描述“狗”的类dog。 但是说明“黑狗”的blackdog班该怎么办呢? 为了能够正确地描述这两个类之间的关系,c提供了能够像“黑狗是黑毛狗”那样定义新的类blackdog的机制。 在此机制中,类blackdog自动拥有类dog的所有成员,而该类的所有对象都是类dog的对象,即“所有黑狗都是狗”。 该机制的具体实现留在下一节。 本节的主要任务是澄清基本概念。 让我们先看几个术语。 首先,“黑狗是黑毛狗”从一般的dog类中特殊化,得到类bl
4、ackdog。 将现有类特殊化创建新类的过程称为“类派生”,将现有类称为“基类”,将新创建的类称为“派生类”。 其中,类dog是基类,而blackdog是派生类。 另一方面,从班级成员的角度来看,派生班自动将基班的所有成员作为自己的成员,这被称为“继承”。 基类和派生类可以分别称为“父类”和“子类”,有时也称为“一般类”和“特殊类”。 类的派生和继承是面向对象编程方法和c语言最重要的特征之一。 首先,客观世界本身是分层的,在人们认识客观世界的过程中,从一般到特殊的演绎思维都发挥着很大的作用。 演绎的过程大多表现为阶层分类的过程。 继承允许程序员基于更常见的类立即创建新类,而无需从零开始设置和修
5、改每个类。 从以前定义的一个或多个类(基类)生成新类的过程称为派生类,这个新类称为派生类。 派生的新类还可以添加或重新定义数据和操作,从而产生类的层次结构。 继承类是指新类继承基类的成员。继承一般表示通用关系,不能将继承理解为构成关系。 从现有类派生新类时,可以对派生类进行以下更改:可以添加新成员函数,可以添加新的数据成员。可以重新定义现有成员函数,可以更改现有成员的属性。如图7.1所示,c有单一继承和多重继承两种继承。 对于单一继承,派生类只能有一个子类;对于多个继承,派生类可以有多个基类。 图7.1类的单继承和多继承的UML结构图,在图7.1中箭头指向基类。 单一的继承形成一棵倒下的树。
6、派生类继承了子类的所有数据成员和成员函数,而程序员也可以将新的数据成员和成员函数添加到派生类中。 因此,基类定义对象集合,派生类通过添加新成员来限制基类的定义,并定义基类的对象集合的子集。 正因如此,可知从编码的观点来看,派生类从基类以低成本交换很多灵活性。 在生成可靠的基类后,可以调试在派生类中所做的修改。 如果c派生类从父类继承属性,则可以对派生类进行扩展、限制、修改、删除或更改。 所有这些变化都可以归结为两种基本面向对象技术。 第一个称为属性约束,用于限制或删除基类的属性。 二是称为性质扩张,增加派生类的性质。7.2单一继承7.2.1在单一继承的一般形式c中,宣告单一继承的一般形式是cl
7、ass派生类名:访问控制基类名private:成员宣言列表protected:成员宣言列表public:成员宣言列表冒号的后面部分显示了这个新类是哪个基类的派生类。 访问控制是指如何控制派生类中基类成员的访问属性。 这可以是三个公共关键字、受保护关键字或私有关键字。 大括号“”对用于声明派生类本身的成员。 这和班里的声明一样,不再说明了。7.2.2派生类的构造函数和构造函数如何初始化派生类的对象,当然,派生类也必须声明与派生类同名的函数。 假设基类Point派生了描述矩形的类Rectangle。 类Rectangle继承Point类的两个数据成员作为矩形顶点,将两个数据成员h和w添加到Rectangle类中,以描述它们各自的高度和宽度。 修改显示类Point的构造函数Point(int,int )和数据的函数Showxy。 我们还将修改Rectangle类的构造函数Rectangle(int,int,int,int )和显示函数Show。 由此可见,派生类添加了两个新的数据成员
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市场调查分析数据整合与处理工具
- 2026年医疗健康大数据平台建设与智能分析应用研究
- 2026年学科教学中引导学生进行知识建构的策略
- 2026年企业职工职业健康检查年度总结报告
- 2026年薪酬调查与薪酬方案设计实训报告
- 2026年寒假预习Unit 8 Making a difference 词汇短语练习(含解析) 人教版英语八年级下册
- 2026年国际数学奥林匹克国家集训队测试试题真题(含答案详解)
- 公司追偿协议书模板
- 建筑分割协议书范本
- 学校食堂管理制度集模板
- 少先队德育知识讲座
- 中医康复实训室方案及流程
- (完整)CRH380A动车组轮对检修流程及改进方案
- 四川省省属卫生事业单位公开招聘卫生专业技术岗位人员公共科目笔试大纲
- 船舶液压系统常见故障分析及解决方案
- 2023年中级注册安全工程师《安全生产专业实务(建筑施工安全)》真题及答案
- THSPP 0010-2023 欧标茶生产茶园栽培技术规程
- 危化品考试题库及答案参考
- 1213 日本当代建筑的坡屋顶的知识
- 情感性精神障碍患者的护理
- GB/T 33172-2016资产管理 综述、原则和术语
评论
0/150
提交评论