- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 派生类与继承 本章主要内容 类的继承与派生概念 类成员的访问控制 单继承与多继承 派生类的构造、析构函数 赋值兼容规则 虚基类 问题的提出及解决方案 在科研开发中,后人应该如何吸收前人的成果,在其基础上继续研究? 当新的问题提出后,如何对原有软件进行高效扩充和改造。 继承与派生问题举例 大学人事管理问题: 思维过程:先共性,再个性 继承与派生的几个概念 保持已有类的特性而构造新类的过程称为继承,继承是面向对象程序设计的一个重要特性。 在已有类的基础上新增自己的特性而产生新类的过程称为派生。 被继承的已有类称为基类(或父类)。 派生出的新类称为派生类(导出类或子类) 。 继承与派生的目的 继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。 实质:在已有类的基础上通过增加新成员、改变成员属性、重新定义已有成员函数来定义一个新的类。 基类与派生类的对应关系 单继承 派生类只从一个基类派生。 多继承(多重继承) 派生类从多个基类派生。 多重派生 由一个基类派生出多个不同的派生类。 多层派生 派生类又作为基类,继续派生新的类。 实例图 派生类的定义 class 派生类名:继承方式1 基类名1,继承方式2 基类名2,... { 成员定义;//新增成员变量、成员函数的定义 }; 继承方式 不同继承方式的影响主要体现在: 1、派生类成员对基类成员的访问控制。 2、派生类对象对基类成员的访问控制。 公有继承--例4.3 对公有继承的分析 基类中的私有成员不能被继承。 派生类中实际拥有的成员是从基类继承过来的成员和派生类中新声明的成员的总和。 派生类的成员函数可以访问到基类的公有、保护成员,但无法访问基类的私有成员。 派生类的对象可以访问到基类的公有成员和派生类中新增加的公有成员。 基类原有的外部接口 变成了派生类外部接口的一部分。 私有继承--例4.1、例4.2 对私有继承的分析 基类中的私有成员不能被继承。 基类中的公有、保护成员在派生类中都成为私有成员。 派生类的对象根本无法访问到基类的任何成员,基类原有的外部接口被派生类封装隐藏起来了。 私有继承以后,基类的成员再也无法在更下层的派生类中发挥作用,这实际上是中止了基类功能的继续派生。 保护继承--例4. 4 对保护继承的分析 基类中的私有成员不能被继承。 基类中的公有、保护成员在派生类中都成为保护成员。 派生类的对象根本无法访问到基类的任何成员,基类原有的外部接口被派生类封装隐藏起来了。 保护继承以后,基类的成员还可以在更下层的派生类中发挥作用,只是对于各层次的派生类对象而言是不可见的。既实现了数据隐藏,又方便继承,实现代码重用。 三种继承方式的总结: 基类的private成员不可被继承,在任何派生类中均是不可见的; private派生使基类的非私有成员都成为派生类的私有成员; protected派生使得基类的非私有成员都成为派生类的保护成员; public派生使基类的非私有成员的访问属性在派生类中保持不变。 再看:protected 成员的特点与作用 作为一个类的成员不考虑被继承时,其性质与 private 成员的性质相同,即类内部可以访问而类的对象不可以访问,具有封装和数据隐藏性。 作为基类成员被继承时与 public 成员的性质相同,可以被继承,在派生类中可以被访问,但不能被派生类对象访问。 在水平方向(类内部)实现了数据隐藏,在垂直方向又方便继承,方便了代码重用,是非常常用的成员属性。 class Base 私有:d1,f1 保护: d2,f2 公有: d3,f3 可直接访问 继承时的构造函数——例4.5 派生类继承了基类可继承的所有成员,但是基类的构造函数和析构函数不可被继承,所以需要派生类中自行定义。 定义构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化由基类构造函数完成。 各构造函数的执行顺序:基类的构造函数、各对象成员(依在类中定义顺序)所属类的构造函数、派生类构造函数。 继承时的析构函数——例4.5 基类的析构函数不能被继承,如果需要,要在派生类中自行定义。 派生类中的析构函数只要负责清理派生类新增成员。系统会自动调用基类的析构函数以清理基类中的成员。 各析构函数的执行顺序,与构造函数的执行顺序正好相反:派生类析构函数、对象成员所属类的析构函数、基类的析构函数。 单一继承时的构造函数——例4.6 派生类名::派生类名(形式参数总表):基类名(实在参数表),对象成员名(实在参数表) { //派生类新增成员的初始化语句; }; 本次课小结: 派生类的定义方式 派生类对基类的继承表现为: 吸收基类的成员; 改造基类的成员; 对基类成员的访问控制(取
文档评论(0)