已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章 继承和派生41 继承42 单继承43多继承41 继承1、 继承的含义 面向对象方法提供了从问题域到解域的自然映射客观世界中的对象既有共性,也有个性,通过不同程度的抽象,形成了分类和层次结构不同层次的类之间体现了概括(generalize)和特化(specify)关系把高层次的类称为父类、超类和基类,把由该类特化产生的低层次类称为子类或派生类派生类不仅具有基类的属性和行为,还具有自己特有的属性和行为 在不同类之间,除了概括和特化的关系外,还有聚合和分解关系模块化的主要目的是实现软件的可复用性从模块的角度看,继承是一种关键性的复用技术 继承机制提供了一种充分利用现有资源的方法它既体现了经济思想,又体现了谦虚精神:我比别人看得远,是因我站在巨人的肩上牛顿继承使得在创建新类时,只需说明新类与基类的区别,从而大量原有代码都可复用 派生类是基类的具体化,是基类定义的延续在多继承时,派生类也是基类的组合2、 继承的概念1基类即父类,超类,是已存在的用来派生新类的类,是被继承的类2派生类即子类,是由己存在的类派生出的新类,是继承其他类特性的类3单继承即单重继承,每个派生类只有一个直接父类是从一个基类派生的继承,形成类的层次,像一棵树4多继承即多重继承,派生类可以有多个直接父类是从多个基类派生的继承,形成一个有向无环图(DAG图)5类的层次结构直接基类、间接基类、直接派生类、间接派生类多层继承:一个基类可以是另一个基类的派生类区别:多层继承和多重继承3、 派生类的定义 单继承class 派生类名 : 继承方式 基类名派生类新定义成员; 多继承class 派生类名 : 继承方式1 基类名1,继承方式2 基类名2,派生类新定义成员;4、 继承方式共有三种:公有继承:public保护继承:protected私有继承:private 可缺省继承方式基类特性派生类特性公有继承publicpublicprotectedprivatepublicprotected不可访问或不可见保护继承protectedpublicprotectedprivateprotectedprotected不可访问私有继承(缺省)privatepublicprotectedprivateprivateprivate不可访问派生类不能继承基类的构造函数、析构函数和友元1基类的私有成员只能被基类中的成员函数和友元函数访问,不能被其他函数访问2基类的保护成员只能被基类及其派生类中的成员函数和友元函数访问3公有继承派生类的对象可以访问基类中的公有成员派生类的成员函数可以访问基类中的公有成员和保护成员4保护继承和私有继承派生类的对象不能访问基类中的任何成员派生类的成员函数可以访问基类中的公有和保护成员5私有继承基类的公有和保护成员只能由直接派生类访问,无法再往下继承42 单继承每个派生类只有一个直接基类,但每个基类可以有多个派生类1、 成员访问权限的控制2、 成员访问权限的调整 保护继承和私有继承将改变基类的公有和保护成员在派生类中的访问权限属性,若欲恢复其访问权限,则应作调整 方法:在派生类相应访问权限段中加以说明:基类名 : 成员名; 访问声明只能对变量或函数名,不能说明类型和参数 基类成员被调整后,在派生类中的访问权限既不能扩大也不能减小,即不能改变所属权限段 私有成员的访问权限不可调整,不能对私有段成员作访问声明 重载函数只需一个声明即可,具有不同访问权限的重载函数名不能作访问声明3、 派生类的成员(1)由两部分组成: 派生类从基类继承来的成员,其封装体叫基类子对象(匿名对象) 派生类自定义成员(2)派生类对象的内存长度是基类数据成员和派生类自定义数据成员的内存空间之和(3)基类的私有成员在派生类中存在,但不可访问,不可见(4)静态成员受访问权限符的限制,但不受继承方式的制约派生类可用“基类名 : 静态成员名”访问基类的static成员(5)派生类共有四种成员: 公有成员 保护成员 私有成员 不可直接访问的成员,它由基类私有成员派生而来的(6)派生类直接访问基类私有成员的方法: 将基类私有段成员放于基类保护段 将派生类或派生类的成员函数声明为基类的友元4、 改造基类成员(1)通过继承方式来控制基类成员在派生类中的访问权限(2)对基类成员进行同名覆盖 在派生类中声明一个与基类成员同名的新成员以屏蔽(隐藏)基类同名成员 在派生类中或通过派生类对象只能访问到派生类中新定义的同名成员 若在派生类中欲调用被编译器隐蔽起来的基类同名成员,则应作访问声明,明确指定基类类范围:对象名.基类名 : 成员名对象名.基类名 : 成员函数名(参数表) 同名覆盖时要求派生类与基类同名的新成员函数原型相同,数据成员的名字和类型相同当同名的基类成员函数和派生类成员函数的参数个数、类型和顺序不完全相同时,则属于函数重载 当欲对从基类继承过来的某些函数功能进行扩充和改造时,都可用同名覆盖原则来实现5、 派生类的构造函数(1)派生类对象的数据结构,由基类数据成员和派生类自定义数据成员共同构成(2)构造函数不能被继承,基类子对象只能通过基类构函来初始化,常以成员初始化列表方式进行(3)定义:派生类名(总参数表):基类名(参数表),子对象名(参数表2),派生类自定义数据成员的初始化;(4)派生类构造函数的调用执行顺序: 基类构造函数:先兄长 子对象类的构函:后客人 派生类构函:最后自己(5)当基类有无参数或缺省构函或未显式定义任何构函时,派生类构函中可省去对基类构函的调用(6)当基类构函有参数时,则派生类必须定义构函,以提供参数传递的途径(7)当派生类的基类也是一个派生类时,则每个派生类只需负责其直接基类构函的调用6、 派生类的析构函数(1)析构函数不能被继承,基类子对象只能通过基类析构函数类释放(2)析构函数调用执行顺序与构函相反: 派生类析构函数:先自己 子对象类析构函数:再客人 基类析构函数:最后兄长7、 赋值相容原理(1)即当派生类从基类公有继承时,派生类对象可自动隐式地转换一个基类对象(2)当公有继承时,在需要基类对象的任何地方,都可以使用公有派生类的对象来替代即公有派生类对象可以作为基类对象使用,但只能使用从基类继承来的成员(基类子对象)(3) 公有派生类的对象、对象指针、对象引用都适用于基类对象、对象指针、对象引用所能使用的场合(4)赋值相容性不可逆若欲将基类对象指针转换成公有派生类对象指针,则必须显式进行类型转换不允许用基类对象给派生类对象赋值(5)也称为子类型对父类型的类型适应 子类型:对类型S,当且仅当它至少提供了类型T的行为,则称S是T的子类型 公有继承时,基类为父类型,派生类为子类型,派生类适应于基类 类型适应:若一个函数可用于父类型的对象,则它也可用于其各个子类型的对象(6) 是多态性的基础,提高了编程效率8、 多层继承(1)所有派生类都只需对其直接基类负责:派生类构函只需向其直接基类传递参数(2)可实现抽象机制和软件重用机制43多继承一、多继承即多重继承 是单继承的扩展和组合,单继承可看作是多继承的特例 派生类有两个或两个以上的直接基类 派生类与每个基类之间仍可看作单继承 赋值相容性原理对多继承同样成立 同名覆盖规则对多继承仍成立 一个类不能多次被说明为同一个派生类的直接基类,即一个类不可以从同一个类中直接继承一次以上(可改用子对象方式) 可采用DAG图示法来表示各个基类与派生类的关系:箭头指向基类 一个类可以多次成为同一个派生类的间接基类2、 多继承的构造函数与析构函数(1)定义:派生类名(总参数表):基类名1(参数表1),基类名2(参数表2),子对象名(参数表n),派生类构造函数体;(2)派生类构函调用执行顺序:(与单继承相同) 先执行基类构函:先兄长 再执行子对象类构函:再客人 最后执行派生类本身的构函:最后自己(3)处于同一层次的各基类构函的执行顺序取决于定义派生类时所指定的各基类顺序,与派生类构函定义的成员初始化列表各项顺序无关(4)析构函数的调用执行顺序与构函相反3、 多继承中的二义性问题(1)即派生类对基类成员访问的不唯一性(继承的模糊性)(2)调用不同基类的相同成员时可能出现二义性措施:使用作用域运算符,用类名对成员加以限定3)访问共同基类的成员时可能出现二义性措施: 用类名限定法来消除二义性,只能用派生类的直接类名来限定 在派生类中重定义一个与基类中同名的成员,以覆盖之 将公共基类说明为虚基类,使之在派生类中只有一个拷贝4)二义性检查是在访问控制和类型检查之前进行的,故只要不同基类有同名成员时,均会出现二义性,即使只有一个可被派生类访问或只有一个名字的类型符合要求(5)存在二义性,则编译时出错44 虚基类1即虚拟基类2若类A是派生类C多条继承路径上的一个公共基类,则A在C的对象中将产生多个基类子对象若欲使其只有一个拷贝,则需将A设置为虚拟基类3引入虚基类的目的:解决二义性问题,使派生类中只有公共基类的一个数据副本4定义:class 派生类名:virtual 继承方式 基类名5虚基类子对象只被初始化一次,虚基类构函也只被执行一次6若虚基类构函带有参数,则其直接或间接派生类的构函成员初始化列表中均应列出对虚基类构函的调用,但只有最后派生出来的用于声明对象的类对虚基类构函的调用才会被执行7在同一层次中,虚基类构函先于非虚基类构函执行8可节省内存空间,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物制药创新:新型药物研发
- 机械原理机构自由度计算
- 神经内科病史采集及神经系统查体
- 肠内营养并发症的预防和护理
- 完整版可下载动态防范校园欺凌安全教育课件
- 电子元器件长期供货合同三篇
- 类风湿性肺病的护理
- 跨学科护理协作机制构建
- 糖尿病的饮食医疗护理
- 细胞膜的结构及细胞基本功能
- 高考语文必考语言文字运用之字词训练(含答案)
- 2027贵州航天电器秋季招聘284人考试模拟试题及答案解析
- 中国危险化学品目录(2025版)官方完整版
- 第6课 人民当家作主 第1课时 课件(内嵌视频)2026-2027学年道德与法治五年级上册统编版
- 2026年初级车险理赔试题及答案
- 高低压成套设备装配质量罚款细则
- 【完美导学】Unit 4 Humor Lesson 3 My Favourite Comedian Reading and writing workshop 课件-2022-2023学年高二英语同步备课(北师大版2019选择性必修第二册)
- 2025年全国职业院校技能大赛中职(电子产品设计与应用赛项)考试题附答案
- 2026年黑龙江绥化市中考数学卷试题真题(含答案详解)
- 充电桩生产制造项目投资计划书
- 2026中国超声波按摩器市场消费状况与竞争态势分析报告
评论
0/150
提交评论