视频教程课件及示例代码l24-01拷贝构造函数_第1页
视频教程课件及示例代码l24-01拷贝构造函数_第2页
视频教程课件及示例代码l24-01拷贝构造函数_第3页
视频教程课件及示例代码l24-01拷贝构造函数_第4页
视频教程课件及示例代码l24-01拷贝构造函数_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C/C+学习指南 第24.1讲:拷贝构造函数作者:邵发 官网: 习题: kbase/本书配套纸质教材,具体信息见官网。背景知识本章将使用“引用”的语法,请学习/回顾第14章。C/C+学习指南 邵发 拷贝构造函数拷贝构造函数是一种特殊的构造函数。copy constructor它是构造函数,所以函数名是类名、没有返回值 它是特殊的构造函数:参数形式是固定的class Objectpublic: Object( const Object& other );C/C+学习指南 邵发 拷贝构造函数的意义拷贝构造函数的含义: 以一个对象为蓝本,来构造另一个对象。Object b;Object a(b);

2、/ 或写成 Object a = b;称作:以b为蓝本,创建一个新的对象a。(a是b的一个拷贝/备份,两者内容完全相同)C/C+学习指南 邵发 拷贝构造函数的调用拷贝构造函数从来不显式调用,而是由编译器隐式地调用。在以下三种情况:(1)定义对象Object a;Object b(a); / 或写成 Object b = a;(2)动态创建对象Object a;Object* p = new Object(a);(3)函数的传值调用void Test(Object obj);C/C+学习指南 邵发 注意 (1): 区分“构造”与“赋值”构造:Object a;Object b = a; / 或写

3、作 Object b(a);/ 此为“构造”,在创建对象的时候给初值,拷贝构造函数被调用赋值:Object a(1,2);Object b;b = a; / 此为“赋值”,不会调用拷贝构造函数C/C+学习指南 邵发 注意 (2): 可以访问同类对象的private成员在拷贝构造函数,可以访问参数对象的任意成员因为它们是同类,所以访问不受限制。Object(const Object& other)this-a = other.a;this-b = other.b;C/C+学习指南 邵发 默认的“拷贝构造函数”当没有书写拷贝构造函数时,编译器会默认提供一个拷贝构造函数。默认的拷贝动作:将每一个成员

4、逐个拷贝。也就是说,在多数情况下,我们无需操心,编译器会帮我们完成成员的拷贝动作。(VC演示)问题:既然默认拷贝成员是够用的,为什么还要自己写一个拷贝构造函数呢?C/C+学习指南 邵发 拷贝构造函数的检查项注意:除非必要,不要添加拷贝构造函数。一旦你决定了要添加拷贝构造函数,请仔细检查:(1)所有的成员变量,要依次拷贝所有成员变量,不要遗漏(2)调用父类的拷贝构造函数(要么不负责,要么负责全部事情)问题:拷贝构造函数非常麻烦,容易遗漏,为什么还要自己写一个拷贝构造函数呢?C/C+学习指南 邵发 小结拷贝构造函数的语法:(特点)拷贝构造函数在何时会被调用?编译器已经默认提供了一个好用的拷贝构造函数拷贝构造函数的检查项:务必仔

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论