第6讲(拷贝构造函数和类组合).doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6讲(拷贝构造函数和类组合)

第6讲 教学内容 4.3 构造函数和析构函数 4.3.2拷贝构造函数 4.4 类的组合 4.4.1组合 教学重点和难点 1拷贝构造函数作用和使用方法 2类的组合的含义和使用方法 教学方法: 通过程序代码演示,详细讲解概念,举一反三,让学生理解,拷贝构造函数的作用,调用时机,特点; 另外,可以用单步调试的方法,演示,让学生观察程序的执行流程,跟踪观察类的构造函数,拷贝构造函数,析构函数,成员函数的执行顺序。 通过列举现实生活中的例子,来讲解什么是类的组合,有什么样的功能,以及组合类的构造函数的特点 教学学时 2 学时 教学过程: 一 拷贝构造函数作用和使用方法 作用: 用一个已经存在的对象(由拷贝构造函数的参数指定),去初始化同类的一个新对象 2形式: 是一种特殊的构造函数,其形参为本类的对象的引用。其形式为: 类名 (类名 对象名) 引用的理解:用引用做函数参数,在内存中并没有产生实参的副本,它是直接对实参操作 3调用时机 普通构造函数在对象创建时自动被调用,而拷贝构造函数在下列三种情况下都会被自动调用 a) 新建对象时,当用类的一个对象去初始化该类的另一个对象时,系统自动调用拷贝构造函数实现拷贝赋值 b) 若函数的形参为类对象,调用函数时,实参赋给形参时,系统自动调用拷贝构造函数 c) 当函数的返回值是类对象时,系统自动调用拷贝构造函数 4 何时需要自己编写拷贝构造函数 a)如果程序员没有为类声明拷贝构造函数,则系统就会在必要时自动生成一个默认的拷贝构造函数。 这个默认的拷贝构造函数执行的功能是:把作为初始值对象的每个数据成员都复制到新建立的对象的对应的数据成员中。 b) 当类的数据成员中有指针类型时,系统提供的默认拷贝构造函数会带来数据安全方面的隐患,此时,必须自己编写拷贝构造函数 例1:分析下列程序的运行结果,理解构造函数,析构函数,拷贝构造函数的调用时机(以教材上的时钟类为例) //程序演示:// 拷贝构造函数的使用 #include iostream.h class Clock { private: 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) 组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法,也就是将功能委托给所组合的一个对象,从而获得新功能。? 3)若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。 例如眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生而成

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档