版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计(C++)OrientedObjectProgramming(C++)主讲:严冬梅第5章堆与拷贝构造函数第5章堆与拷贝构造函数
5.1关于堆C++的内存格局通常分为四个区:代码区、全局数据、栈区、堆区。全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回地址等存放在栈区,余下的空间都被作为堆区。
第五章堆与拷贝构造函数5.2需要new和delete的原因
使用new和delete比malloc()和free()简单,不用头文件声明。从程序设计的需要来看,在分配内存申请的时候,总是知道分配的空间派什么用,而且分配空间大小总是某个数据类型(包括类类型)的整数倍。类对象的建立是分配空间、构造结构以及初始化的三位一体,它们统一由构造函数来完成。malloc()函数在分配空间的时候不能调用构造函数。第五章堆与拷贝构造函数5.3分配堆对象如果是分配局部对象,则在该局部对象退出作用域时自动调用析构函数。但是堆对象的生命期是整个程序生命期,所以除非程序运行完毕,否则堆对象生命不会到期。堆对象析构是在释放堆对象语句delete之时。
构造函数可以有参数,所以跟在new的类型后也可以有参数。从堆上分配对象数组,只能调用默认的构造函数,不能调用其它任何构造函数。voidfn(){TDate*pS;pS=newTDate;……deletepS;}第五章堆与拷贝构造函数5.4拷贝构造函数需要性对象初始化
Tdated1(1999,9,9);
Tdated2=d1;函数参数传递
voidfn(Tdated){}
fn(d1);函数的返回值是类对象Tdatefn(){}
Tdated=fn();拷贝构造函数实际上也是构造函数,其功能是用一个已知的对象来初始化一个被创建的同类的对象。第五章堆与拷贝构造函数格式
class类名{public:类名(形参表);构造函数类名(类名&);//拷贝构造函数声明};类名::类名(类名&对象名)//拷贝构造函数定义{函数体}Tdate::Tdate(Tdate&d){}拷贝构造函数是特殊的构造函数,形参是本类对象的引用,其作用是使用一个已经存在的对象去初始化一个新的同类的对象。第五章堆与拷贝构造函数#include<iostream.h>classTPoint{public:TPoint(intx,inty){X=x;Y=y;cout<<"ConstructorCalled."<<X<<","<<Y<<"\n";}TPoint(TPoint&p){X=p.X;Y=p.Y;cout<<"CopyconstructorCalled."<<X<<","<<Y<<"\n";}~TPoint(){cout<<"DestructorCalled."<<X<<","<<Y<<"\n";}intXcoord(){returnX;}intYcoord(){returnY;}private:intX,Y;};第五章堆与拷贝构造函数#include<iostream.h>#include“point.h”voidmain(){TPointp1(5,7);TPointp2(p1);cout<<“p2=(“<<p2.Xcoord()<<“,”<<p2.Ycoord()<<“)”<<endl;
}ConstructorCalled.5,7CopyconstructorCalled.5,7p2=(5,7)DestructorCalled.5,7DestructorCalled.5,7第五章堆与拷贝构造函数TPointf(TPointq){cout<<"Infunctionf!\n";intx,y;x=q.Xcoord()+10;y=q.Ycoord()+20;TPointr(x,y);returnr;}voidmain(){TPointm(20,35),p(0,0);TPointn(m);p=f(n);cout<<"Return,inmain().\n";cout<<"p=("<<p.Xcoord()<<","<<p.Ycoord()<<")"<<endl;}ConstructorCalled.20,35ConstructorCalled.0,0CopyconstructorCalled.20,35CopyconstructorCalled.20,35Infunctionf!ConstructorCalled.30,55CopyconstructorCalled.30,55DestructorCalled.30,55DestructorCalled.20,35DestructorCalled.30,55Return,inmain().p=(30,55)DestructorCalled.20,35DestructorCalled.30,55DestructorCalled.20,35classStudent{public:Student(char*pName="noname",intssId=0){strncpy(name,pName,40);name[39]='\0';id=ssId;cout<<"Constructingnewstudent"<<pName<<endl;}Student(Student&s){cout<<"Constructingcopyof"<<<<endl;strcpy(name,"copyof");strcat(name,);id=s.id;}~Student(){cout<<"Destructing"<<name<<endl;}protected:charname[40];intid;};voidfn(Students){cout<<"Infunctionfn()\n";}voidmain(){Studentrandy("Randy",1234);cout<<"Callingfn()\n";fn(randy);cout<<"Returnedfromfn()\n";}第五章堆与拷贝构造函数ConstructingnewstudentRandyCallingfn()ConstructingcopyofRandyInfunctionfn()DestructingcopyofRandyReturnedfromfn()DestructingRandy第五章堆与拷贝构造函数5.5默认拷贝构造函数类定义中,如果未提供自己的拷贝构造函数,则C++提供一个默认拷贝构造函数,就像没有提供构造函数时,C++提供默认构造函数一样。C++提供的默认拷贝构造函数的功能是把初始值对象的每个数据成员的值都复制到新建立的对象中,即完成一个成员一个成员的拷贝。classStudent{public:Student(char*pName="noname"){cout<<"Constructingnewstudent"<<pName<<endl;strncpy(name,pName,sizeof(name));name[sizeof(name)-1]='\0';}Student(Student&s){cout<<"Constructingcopyof"<<<<endl;strcpy(name,"copyof");strcat(name,);}~Student(){cout<<"Destructing"<<name<<endl;}protected:charname[40];};第五章堆与拷贝构造函数classTutor{public:Tutor(Student&s):student(s){cout<<"Constructingtutor\n";}protected:Studentstudent;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025江苏南通定向派遣鑫汇护理院护理员招聘2人笔试历年参考题库附带答案详解
- 2025广东杏晖投资控股集团有限公司招聘4人笔试历年参考题库附带答案详解
- 2025内蒙古锡林郭勒盟锡林珠宝城老凤祥招聘26人笔试历年参考题库附带答案详解
- 2026公务员考试题及答案广播语音
- 烟草招聘的笔试题目及答案
- 网络互助行为研究-洞察与解读
- 2025年 石家庄市市属国有企业招聘笔试考试试卷附答案
- 2025年医院应急演练试卷及答案
- 企业流程管理优化设计模板
- 2025年一建《机电工程管理与实务》考试真题详解及备考策略试卷
- 最新《工会基础知识》试题库及答案1000题【完美打印版】
- CJJ82-2019-园林绿化工程施工及验收规范
- 无人机驾驶员航空知识手册培训教材(多旋翼)课件
- 《汉语拼音》基础知识
- 周杰伦英语介绍(共20张)课件
- 斐波拉契数列与黄金分割
- SPSS主成分分析和因子分析课件(PPT 69页)
- 沧州临港仁国化工有限公司30万吨_年高纯液体二氧化碳精制项目环境报告书
- 【老师必备】部编版三年级语文上册第五单元【集体备课】
- 简谱视唱15942
- 未知碱的测定
评论
0/150
提交评论