




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3/2/2022.1C+程序设计教程(第二版)第十章 继承 Chapter 10 Inheritance 清华大学出版社 钱 能3/2/2022.2第十章内容n继承结构继承结构 ( Inheritance Structure ) n访问父类成员访问父类成员 ( Access Fathers Member ) n派生类的构造派生类的构造 ( Constructing Derived Classes ) n继承方式继承方式 ( Inheritance Mode )n继承与组合继承与组合 ( Inheritance & Composition ) n多继承概念多继承概念 ( Multi-In
2、heritance Concept ) n多继承技术多继承技术 ( Multi-Inheritance Technology ) 3/2/2022.31. 继承结构继承结构 ( Inheritance Structure ) n宇宙万事万物都是分类分层的,解决问题可以从事物之间的上下关系中着手这是继承引入程序设计的前提n例如:已知鸟的属性,鸭子是什么的描述便可以在鸟的基础上进行:n除了是鸟之外,还会一种区别于其他鸟的特殊的嘎嘎叫n 因为鸭子不会飞,于是就在继承鸟的属性中去掉会飞的属性3/2/2022.4派生类对象结构派生类对象结构 对于下面的继承关系:对于下面的继承关系:class Fathe
3、r int a,b;public:/ 成员函数;class Son:public Father int c;public: / 成员函数;基类对象子类对象子类对象空间总是不小于基类对象cabab基类部分子类添加部分3/2/2022.52. 访问父类成员访问父类成员 ( Access Fathers Member ) 捆绑子类对象可以访问父类成员函数和自身成员函数;捆绑基类对象只能访问基类成员函数,不能访问子类成员函数,这是自然的: Student ds(“Jenny); GraduateStudent gs(“Smith”); ds.addCourse(3, 2.5); ds.display(
4、); gs.addCourse(3, 3.0); gs.display(); gs.getQualifier(); ds.getQualifier(); / error3/2/2022.6子类也是基类的用户,其成员函数不能访问基类的私有成员但子类可以区别于外来用户,让基类protected成员允许子类对象访问而不许外来对象访问. 例如,对于基类: class Father int a; protected: void fp() couta; public: void print() couta; ;外来用户:外来用户:void fn() Son d; d.print(); / ok d.dis
5、p(); / ok d.fp(); / error Father f; f.print(); / ok f.fp(); / error子类用户:子类用户:class Son : public Father int b;public: void disp() fp(); / ok print(); / ok void ed()a+; / error;3/2/2022.73.构造子类对象构造子类对象 ( Constructing Objects of SubClass ) 默认构造:如果子类没有构造函数,则调用默认构造函数,默认构造函数转而先调用默认父类构造函数,完成父类对象部分的构造如果父类的上
6、面还有父类,则依次递归3/2/2022.8自定义构造:为了规定父类构造函数的调用方式而不是默认调用,需要自定义子类构造函数,并且,在构造函数定义体的初始化列表中描述父类构造函数的调用形式描述形式与对象成员构造的描述一致GraduateStudent ( const string& pN, Advisor& adv ) : Student(pN), advisor(adv), qualifierGrade(0) 3/2/2022.9覆盖(overlap):子类定义了与祖先类(父类,或者父类的父类.)名字相同的成员class Studentpublic: void display(
7、); / .;class GraStudent:public Studentpublic: void display(); /overlap / .;void fn() GraStudent gs; gs.display(); /call GraStudent:display()捆绑子类对象访问成员函数,则首先匹配子类,然后父类,再父类的父类,依此类推3/2/2022.10拷贝构造:子类若没有定义拷贝构造函数,则子类对象在拷贝创建时先调用父类的拷贝构造函数,再完成自己的位对位拷贝父类若没有定义拷贝构造函数,则子类对象在拷贝创建中调用父类默认的拷贝构造函数赋值操作符原理相似3/2/2022.11
8、4. 继承方式继承方式 ( Inheritance Mode )继承可以公有继承,保护继承和私有继承公有继承是普通继承,基类可以为大多数应用服务也可以重复继承保护继承是“单传”继承,只继承给自己的后代,应用是以子孙的公有成员函数来对外展开服务的私有继承是“绝版”继承,该基类只继承直接的子类,而不考虑让子类再继承下去3/2/2022.12继承体系中,子类可以在祖先类成员可见的范围中调整其访问控制属性class A int a1;public: int a2;class B : private Apublic: using A:a2; / a2从私有转为公有 using A:a1; / 错: a1
9、不可见;int main() B d; d.a2 = 1; / ok3/2/2022.135. 继承与组合继承与组合 ( Inheritance & Composition ) 组合:类中含有对象成员,称为组合式包含继承:子类继承了父类,称为子类对象对父类对象的继承式包含继承和组合都重用了类设计继承重用场合,父类对象就在自己家里,无须捆绑父类对象便能对其操作但是操作受到了父类访问控制属性设定的制约组合重用场合,使用对象成员的操作需捆绑对象成员,而且只能使用对象的公有成员继承部分派生部分其他数据成员Student对象Advisor对象研究生对象组合式包含继承式包含3/2/2022.14继
10、承型的Circle类头文件:#includepoint.hclass Circle : public Point double radius;public: /成员函数;组合型的Circle类头文件:#includepoint.hclass Circle Point point; double radius;public: /成员函数;公有成员函数实现不同,但可以让界面相同,从而不影响编程者使用继承与组合在于实现技术不同3/2/2022.15使用含有继承和组合的子类:只要外界不直接或无法直接使用该子类的祖先类成员或对象成员,仅提供公有的成员函数,则对外界来说,无所谓该子类的继承式包含还是组合式
11、包含(包含组合或继承的哪种头文件都可):#include”point.h”#include“circle.h” /组合或继承int fn() Circle c(Point(2.3, 5.6), 7); c.moveTo(1, 2); c.modifyRadius(3); / 3/2/2022.166. 多继承概念多继承概念 ( Multi-Inheritance Concept ) 多继承:一个实体,来自多个类对象的组合因而它同时也可以继承多个基类来实现3/2/2022.17多继承的主要技术问题:由于子类可以访问多个基类,而基类之间没由于子类可以访问多个基类,而基类之间没有专门的协调,所以,基
12、类可能出现相有专门的协调,所以,基类可能出现相同的名字,这于子类来说,要访问这种同的名字,这于子类来说,要访问这种名字增加了编程的复杂性,不得不要在名字增加了编程的复杂性,不得不要在名字前加上前缀名字前加上前缀然而,这种同名也许意义相同,操作这种名然而,这种同名也许意义相同,操作这种名字本身便是一种分别性操作,不合逻字本身便是一种分别性操作,不合逻辑辑于是便寻求一种分离共性,统一基类的解决于是便寻求一种分离共性,统一基类的解决办法办法(见见CH12.5).但是,不同的父类拥有共性基类,访问基类但是,不同的父类拥有共性基类,访问基类成员仍然存在相同名字冲突问题成员仍然存在相同名字冲突问题3/2/2022.187. 多继承技术多继承技术 ( Multi-Inheritance Technology ) n解决多继承基类名字冲突问题n将多个父类看成同一基类下的不同子类,而所需要派生的子类来自于这些不同子类于是形成一个棱形结构Bed sleep()Sofa watchTV()SleeperSofa FoldOut()Furniture weightgetWeight()setWeight()3/2/2022.19多个不同子类(如,床、沙发)在继承基类的方式上采取虚拟继承,它的作用是,当对象创建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纺织品设计师证书考试的职业素养提升试题及答案
- 中学生艾滋病知识普及课件
- 驿站合伙合同协议书
- 纺织工程师证书考试解析中的关键试题及答案
- 废旧门窗回收合同协议书
- 《跨国物流操作》课件
- 合同协议书范文
- 合同毁约协议书
- 爱情合同协议书
- 退款合同协议书
- 高中英语教师研修-罗马建筑文化课件
- 货物验收单(模板)
- 幼儿园教学课件小班社会《孤独的小熊》课件
- 复旦大学大学生创业导论课件06创业的商业计划书
- 客诉客退经济处罚准则及要求
- 医疗纠纷和解协议书(6篇)
- 293219民事诉讼法(第六版)教学PPT完整版课件全套ppt教学教程最全电子教案
- 人教版小学五年级数学竞赛试题及答案
- 农村不动产权籍调查工作指南
- 氧气安全标签
- 管道天然气改造普及工程(PE管)定向钻专项施工方案
评论
0/150
提交评论