钱能第14章 堆与拷贝构造函数_第1页
钱能第14章 堆与拷贝构造函数_第2页
钱能第14章 堆与拷贝构造函数_第3页
钱能第14章 堆与拷贝构造函数_第4页
钱能第14章 堆与拷贝构造函数_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、+程序设计 第14章堆与拷贝构造函数C第14章 堆与拷贝构造函数14.1 关于堆14.2 需要new和delete的原因14.3 分配堆对象14.4 拷贝构造函数14.5 默认拷贝构造函数14.6 浅拷贝与深拷贝14.7 临时对象14.8 无名对象14.9 构造函数用于类型转换+程序设计 第14章堆与拷贝构造函数C14.1 关于堆C+程序的内存格局通常分为四个区:(1)全局数据区(data area): 全局变量、静态数据、常量存放在全局数据区。(2)代码区(code area) : 所有类成员函数和非成员函数代码存放在代码区。(3)栈区(stack area): 为运行函数而分配的局部变量、

2、函数参数、返回数据、返回地址等存放在栈区。(4)堆区(即自由存储区)(heap area): 其余的空间都是堆区。+程序设计 第14章堆与拷贝构造函数C14.2 需要new和delete的原因分配内存空间、撤销内存空间C的用法: #include v void* malloc(size_t);v void free(void*);C+的用法:v newv delete+程序设计 第14章堆与拷贝构造函数C 从C+的立场来看,不能用malloc()函数的一个原因是,它在分配空间的时候不能调用构造函数。类对象的建立是分配空间、构造结构以及初始化的三位一体,它们统一由构造函数来完成。 例如:用mal

3、loc()进行对象的创建过程。 +程序设计 第14章堆与拷贝构造函数C14.3 分配堆对象C+的new和delete的用法:+程序设计 第14章堆与拷贝构造函数Cnew带参数的形式+程序设计 第14章堆与拷贝构造函数C例如,下面的代码分配了参数给定的对象个数,并在函数结束时,予以返还。 从堆上分配对象数组,只能调用默认的构造函数,不能调用其它任何构造函数。如果该类没有默认构造函数,则不能分配对象数组。+程序设计 第14章堆与拷贝构造函数C14.4 拷贝构造函数 可用一个对象去构造另一个对象,或者说,用另一个对象值初始化一个新构造的对象,例如:Student s1(“Jenny”);Studen

4、t s2 = s1; /用s1的值初始化s2+程序设计 第14章堆与拷贝构造函数C对象作为函数参数传递时,也涉及对象的拷贝,例如:+程序设计 第14章堆与拷贝构造函数C拷贝构造函数的用法例ch14_1.cpp P317+程序设计 第14章堆与拷贝构造函数C续运行结果:+程序设计 第14章堆与拷贝构造函数C14.5 默认拷贝构造函数 类定义中,如果未提供自己的拷贝构造函数,则C+提供一个默认拷贝构造函数,就像没有提供构造函数时,C+提供默认构造函数一样。 C+提供默认的拷贝构造函数工作的方法是,完成一个成员一个成员的拷贝。如果成员是类对象,则调用其拷贝构造函数或者默认拷贝构造函数。+程序设计 第

5、14章堆与拷贝构造函数C例如,下面的程序中Tutor类使用了默认拷贝构造函数。ch14_2.cpp+程序设计 第14章堆与拷贝构造函数C续+程序设计 第14章堆与拷贝构造函数C续运行结果:+程序设计 第14章堆与拷贝构造函数C14.6 浅拷贝与深拷贝浅拷贝创建p2时,对象p1被复制给了p2,但资源并未复制,因此,p1和p2指向同一个资源,这称为浅拷贝。深拷贝当一个对象创建时,分配了资源,这时,就需要定义自己的拷贝构造函数,使之不但拷贝成员,也分配和拷贝资源。+程序设计 第14章堆与拷贝构造函数C例ch14_3.cpp P320+程序设计 第14章堆与拷贝构造函数C例ch14_4.cpp P32

6、1+程序设计 第14章堆与拷贝构造函数C续运行结果:+程序设计 第14章堆与拷贝构造函数C14.7 临时对象当函数返回一个对象时,要创建一个临时对象以存放返回的对象。例如,下面的代码中,返回的ms对象将产生一个临时对象: 在这里,系统调用拷贝构造函数ms拷贝到新创建的临时对象中。+程序设计 第14章堆与拷贝构造函数C14.8 无名对象可以直接调用构造函数产生无名对象。例如,下面的代码在函数fn()中,创建了一个无名对象:+程序设计 第14章堆与拷贝构造函数C无名对象可以作为实参传递给函数,可以用来拷贝构造一个新对象,也可以初始化一个引用的声明。例如,下面的代码表达了无名对象典型的三种用法:+程序设计 第14章堆与拷贝构造函数C14.9 构造函数用于类型转换例如,下面的代码定义了学生类的构造函数: 这里Student(char *)构造函数同时也在告知,如何将char*转换成一个Student对象。

温馨提示

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

评论

0/150

提交评论