堆与拷贝构造函数.ppt

堆与拷贝构造函数.ppt

ID:56432632

大小:103.50 KB

页数:18页

时间:2020-06-18

堆与拷贝构造函数.ppt_第1页
堆与拷贝构造函数.ppt_第2页
堆与拷贝构造函数.ppt_第3页
堆与拷贝构造函数.ppt_第4页
堆与拷贝构造函数.ppt_第5页
资源描述:

《堆与拷贝构造函数.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、面向对象程序设计(C++)第4章堆与拷贝构造函数4.1关于堆C++程序的内存格局通常分为四个区:全局数据区代码区栈区堆区全局变量、静态数据、常量存放在全局数据区;所有类的成员函数和非成员函数代码存放在代码区;为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放于栈区;余下的空间作为堆区。4.2需要new和delete的原因从C++的立场来看,不使用malloc()函数的原因是它在分配空间的时候不能调用构造函数。类对象的建立包括分配空间、构造结构以及初始化,这些是由构造函数统一完成的。voidfn(){Tdate*pD;pD

2、=(Tdate*)malloc(sizeof(TDate));//…free(pD);}classTDate{public:TDate();//构造函数voidSetDate(inty,intm,intd);intIsLeapYear();voidPrint();private:intyear,month,day;};4.2需要new和delete的原因如果构造函数被调用,则须在进行内存分配的malloc()调用时进行,而malloc()仅是一个函数调用,没有足够的信息调用构造函数。pD从malloc()获得只是一个含有随机数据的类

3、对象空间,须在内存分配之后再进行初始化。voidfn(){Tdate*pD;pD=(Tdate*)malloc(sizeof(TDate));pD->SetDate(2011,1,1);//…free(pD);}4.3分配堆对象C++的new和delete机制更简单易懂。voidfn(){Tdate*pS;pS=newTDate;//分配堆空间并构造//…deletepS;//析构并将空间返还给堆}如果分配局部对象,则在该局部对象退出作用域时自动调用析构函数。但堆对象的作用域是整个程序生命期,所以除非程序运行完毕,否则堆对象的作用域

4、不会到期。堆对象的析构是在释放堆对象语句delete执行之时。4.3分配堆对象如果构造函数参数,则new后面的类类型也需要相应的参数。classTDate{public:TDate(inty,intm,intd){year=y;month=m;day=d;private:intyear,month,day;};voidfn(){Tdate*pD;pD=newTdate(2011,1,1);//…deletepD;}new根据参数匹配的原则来调用构造函数,如果写成pD=newTdate;则由于TDate类没有提供无参的构造函数而出错。

5、4.3分配堆对象从堆中还可以分配对象数组classStudent{public:Student(char*pName=“noname”){strncpy(name,pName,sizeof(name));name[sizeof(name)-1]=‘’;}private:charname[40];};voidfn(intnum){Student*pS=newStudent[num];//…delete[]pS;}构造函数被调用num次,依次构造pS[0]到pS[num-1]。从堆上分配对象数组,只能调用默认构造函数,不能调用任何其

6、他构造函数。4.4拷贝构造函数如果希望生成一个对象的副本,可以创建一个新的对象,并将现有对象的数据成员值赋值给新对象的相应成员。这种方法只在一定条件下可行,但繁琐。更好的途径是使类具有某种复制本类对象的能力,这便是拷贝构造函数(CopyConstructor)的功能。拷贝构造函数是一种特殊的构造函数,具有一般构造函数的特点,其作用是用一个已经存在的对象去初始化一个新的同类对象。4.4拷贝构造函数可以根据实际问题的需要定义拷贝构造函数,以实现同类对象之间数据成员的传递。如果没有自定义类的拷贝构造函数,系统会自动生成一个默认的拷贝构造函

7、数,其工作方式是按成员初始化(memberwiseinitialization),即通过依次拷贝每个非静态数据成员实现,如果成员是类对象,则调用其拷贝构造函数或者默认拷贝构造函数。拷贝构造函数的形式:类名(类名&对象名)形参是本类对象的引用4.4拷贝构造函数classTPoint{public:TPoint(intx=0,inty=0){X=x;Y=y;}TPoint(TPoint&p);//拷贝构造函数intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};TPoint::TP

8、oint(TPoint&p){X=p.X;Y=p.Y;cout<<“拷贝构造函数被调用”<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。