




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6讲教学内容4.3 构造函数和析构函数 4.3.2拷贝构造函数 4.4 类的组合 4.4.1组合教学重点和难点1拷贝构造函数作用和使用方法2类的组合的含义和使用方法教学方法: 通过程序代码演示,详细讲解概念,举一反三,让学生理解,拷贝构造函数的作用,调用时机,特点; 另外,可以用单步调试的方法,演示,让学生观察程序的执行流程,跟踪观察类的构造函数,拷贝构造函数,析构函数,成员函数的执行顺序。 通过列举现实生活中的例子,来讲解什么是类的组合,有什么样的功能,以及组合类的构造函数的特点教学学时2 学时教学过程:一 拷贝构造函数作用和使用方法1 作用:用一个已经存在的对象(由拷贝构造函数的参数指定),去初始化同类的一个新对象2形式:是一种特殊的构造函数,其形参为本类的对象的引用。其形式为: 类名 (类名 & 对象名) 引用的理解:用引用做函数参数,在内存中并没有产生实参的副本,它是直接对实参操作3调用时机普通构造函数在对象创建时自动被调用,而拷贝构造函数在下列三种情况下都会被自动调用a) 新建对象时,当用类的一个对象去初始化该类的另一个对象时,系统自动调用拷贝构造函数实现拷贝赋值b) 若函数的形参为类对象,调用函数时,实参赋给形参时,系统自动调用拷贝构造函数c) 当函数的返回值是类对象时,系统自动调用拷贝构造函数 4 何时需要自己编写拷贝构造函数a)如果程序员没有为类声明拷贝构造函数,则系统就会在必要时自动生成一个默认的拷贝构造函数。 这个默认的拷贝构造函数执行的功能是:把作为初始值对象的每个数据成员都复制到新建立的对象的对应的数据成员中。b) 当类的数据成员中有指针类型时,系统提供的默认拷贝构造函数会带来数据安全方面的隐患,此时,必须自己编写拷贝构造函数例1:分析下列程序的运行结果,理解构造函数,析构函数,拷贝构造函数的调用时机(以教材上的时钟类为例)/程序演示:/ 拷贝构造函数的使用#include class Clockprivate:int hour;int minute;int second;public:Clock(int h = 0 ,int m = 0 ,int s = 0);void display();Clock(Clock & obj);/默认拷贝构造函数的形式;Clock:Clock(int h ,int m ,int s ) hour = h;minute = m;second = s;cout construct calledendl;void Clock:display()cout hour : minute : secondendl;Clock:Clock(Clock & obj)/默认拷贝构造函数的形式 hour= obj.hour; minute = obj.minute; second = obj.second; cout copy construct calledendl;void fun1(Clock obj)obj.display();Clock fun2()Clock obj(12,34,56);return obj;void main(void)Clock one(06,30,30);one.display();/*Clock two(one);/调用时机1:用一个已经存在的对象去初始化另外一个新建的对象two.display();*/ / fun1(one);/调用时机2:函数的参数为了类的对象 / fun2().display();/调用时机3:当函数的返回值为类的对象时二 类的组合1 什么是类的组合:、1)类中的数据成员是另一个类的对象,称为类的组合我们已经习惯了,设计一个类时,类的数据成员为基本数据类型,由基本数据类型作为类的组成部件,实际上类的数据成员的类型可以为基本数据类型,也可以为自定义类型,当然也可以为类的对象,利用已有类的对象来构件新的类2) 组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法,也就是将功能委托给所组合的一个对象,从而获得新功能。n3)若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。 例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成4)组合类的构造函数的特点:a) 原则: 不仅要负责本类中的基本类型的数据成员进行初始化,也要对对象成员初始化 组合类构造函数的一般形式: 类名(形参表):对象1(形参表),对象2( 形参表),. 本类初始化 b) 对象成员构造函数的调用顺序取决于在类中的声明顺序,而与在初始化列表中的顺序无关c)建立类的对象时,先调用各个对象成员的构造函数,然后再执行本类的构造函数d)析构函数的调用顺序与构造函数的调用顺序相反例1:测试组合类的构造函数和析构函数的调用顺序 #include class Partprivate:int val;public:Part(int n)val = n;cout val Part constructor called.endl;Part()/默认构造函数 val = 0; cout val Part default constructor called.endl;Part() cout val Part destroy called.endl;class Wholeprivate:int data;Part two,one;/类的组合,类的数据成员是另外一个类的对象,/此时one 和two也叫对象成员/构造函数的调用顺序与此时的声明顺序有关,先调用two的构造函数/再调用one的构造函数public:Whole(int i,int j):one(i),data(j)/ 初始化列表 cout data Whole constructor called.endl;Whole() cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 圆的面积课件教学评价
- 2025年医院护理部主任竞聘面试经验与题目预测
- 2025年心理治疗师初级面试模拟试卷及参考答案
- 课与课件融合案例
- 2025年安全操作规范知识题库
- 2025年农机长助理笔试核心考点精解
- 2025年无人机航拍技术初级复习手册
- 2025年干部学院教师招聘笔试模拟练习题及答案
- 乌塔课文教学课件
- 2025年新疆安全生产培训考试强化训练
- 水箱拆除专项施工方案
- YY/T 1851-2022用于增材制造的医用纯钽粉末
- GB/T 20858-2007玻璃容器用重量法测定容量试验方法
- 纪委案件审理课件教材
- 生活中的会计课件
- 辽宁大学学生手册
- 湘美版美术一年级上册全册课件
- 酒水购销合同范本(3篇)
- 师说一等奖优秀课件师说优质课一等奖
- 学习罗阳青年队故事PPT在急难险重任务中携手拼搏奉献PPT课件(带内容)
- 小学生打扫卫生值日表word模板
评论
0/150
提交评论