第15讲(浅拷贝和深拷贝).doc_第1页
第15讲(浅拷贝和深拷贝).doc_第2页
第15讲(浅拷贝和深拷贝).doc_第3页
第15讲(浅拷贝和深拷贝).doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

第15讲教学内容6.4 深拷贝与浅拷贝 教学重点和难点1 什么是浅拷贝和深拷贝2 在什么情况下,要避免浅拷贝带来的问题教学方法:通过举一个简单的基本数据类型的动态分配,来讲解浅拷贝带来的问题,在此基础上,讲解浅拷贝和深拷贝的概念 从这个基本数据类型的动态分配,引申到类中有动态内存分配时,如何设计构造函数,拷贝构造函数,=构造函数 教学学时2 学时 教学过程一动态分配内存的概念和作用:1什么是浅拷贝以及浅拷贝带来的问题 浅拷贝:数据元素的一一对应复制,如果有指针变量时,仅仅是地址复制,并没有形成真正的副本。程序演示:基本数据类型的动态分配过程中的浅拷贝和深拷贝问题#include void main(void)int *p1 ;int *p2;p1 = new int(20);cout *p1= *p1 endl;p2 = p1; /浅拷贝,只是地址拷贝,没有形成真正的副本cout *p2= *p2 endl;delete p1; delete p2; /错误!delete对同一块内存只能释放一次,因而带来内存重复释放,这就是一种典型的浅拷贝问题。2什么是深拷贝: 当被复制的对象数据成员是指针类型时,不是复制该指针变量本身,而是将指针所指的对象进行复制#include void main(void)int *p1 ;int *p2;p1 = new int(20);cout *p1= *p1 endl;p2 = new int; /先申请一个空间*p2 = *p1; /实现深拷贝cout *p2= *p2 endl;delete p1;delete p2;二 什么情况下,要避免浅拷贝带来的问题:有时,在程序实际运行之前,并不知道将需要多少内存。毫无疑问,对此的解决方案就是在程序执行期间根据需求动态的分配内存。类也不例外,有时在编写类时,并不知道一个对象需要多少内存。在这种情况下,对象就应当动态的分配内存。对象的动态分配内存会带来一些问题。包括释放内存,处理对象复制以及处理对象赋值。此时解决这些问题通常采用的方法是:1)一个析构函数释放分配的内存空间2)建立一个深拷贝构造函数3)建立一个深拷贝“=”运算符程序举例:#include using namespace std;class CStuprivate:char *name;int id;public:CStu(char name = Noname,int id = 0)/注意:此时不要写成:this-name = name; /因为:一旦这样,就表示不能够修改name所指的内存的值了 /要用下面的表达式。this-name = new charstrlen(name)+1;/当数据成员中有指针变量的时候,要动态分配一块内存空间,strcpy(this-name,name); /如果name所指向的内存空间没有分配,则用strpcy就会语法错误this-id = id;void disp()cout 姓名 name,学号idendl;CStu() /析构函数会释放在构造函数中分配的内存,不过,并没有要求说析构函数中只能释放内存,可以在析构函数中写任何代码,不过析构函数仅用于释放内存是一个不错的想法if( name != NULL)delete name;name = NULL;CStu(CStu & obj)/当数据成员中有指针变量的时候 /使用了动态内存分配的,此时要自己编写拷贝构造函数id = obj.id;name = new charstrlen()+1;/使每个对象形成真正的副本strcpy(name,);/深拷贝:完成的是指针所指对象的复制;void main(void)CStu one(小张,50001);one.disp();CStu two(one)

温馨提示

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

评论

0/150

提交评论