下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、student.h#ifndef STUDENT_H#define STUDENT_Hclass Studentpublic:Student(char* pName="no name",int ssID=0);Student(Student& s);/拷贝构造函数Student();protected:char name40;int id;#endifstudent.cpp#include <iostream>#include <string>#include "student.h"using namespace std;
2、Student:Student(char* pName,int ssID)strcpy(name,pName);cout<<"constructing new student"<<pName<<endl;Student:Student(Student& s) /拷贝构造函数,必须用引用或指针,不能直接用student(student s) /因为不能像基本数据类型那样直接传递对象的值。 cout<<"constructing copy of"<<<<endl;st
3、rcpy(name,"copy of");strcat(name,);id=s.id;Student:Student()cout<<"destructing"<<name<<endl;/* *test.cpp *堆与拷贝构造函数的测试 *2011/10/7 *刘珅珅*/#include <iostream>#include <string>#include "student.h"using namespace std;void fn(Student s);int
4、main(int argc,char* argv)Student randy("Randy",1234);cout<<"calling fn()n"fn(randy);/要调用拷贝构造函数cout<<"returned from fn()n" Student jenny=randy;/调用拷贝构造函数return 0;void fn(Student s)cout<<"In function fn()n"输出的结果:有拷贝构造函数:constructing new studentR
5、andycalling fn()constructing copy of RandyIn functiong fn()destructingcopy ofRandy/fn()函数结束,发生析构,析构的是fn中s对象returned from fn()constructing copy of Randy/拷贝构造jenny对象destructingcopy ofRandy/析构jenny对象destructingRandy/析构了randy对象没有拷贝构造函数:constructing new studentRandycalling fn()In functiong fn()/当没有自定义拷贝构
6、造函数时,C+会调用默认的拷贝构造函数/但类拥有资源时,采用默认的拷贝构造函数容易出问题destructingRandy/fn()函数,发生析构,析构对象sreturned from fn()destructingRandy/析构对象jennydestructingRandy用一个类对象区构造一个新的对象时,如果没有自定义的拷贝构造函数,C+会调用默认的拷贝构造函数,但如果构造函数中有资源(堆内存)时,会出问题,因为默认的拷贝构造函数只会简单的拷贝资源,而不会分配资源,这时会出现:两个对象都拥有同一个资源的局面,在析构时会产生错误。这时需要自定义拷贝构造函数做深拷贝。person.h#ifnd
7、ef PERSON_H#define PERSON_Hclass Personpublic:Person(char* pN);Person(Person& p);/拷贝构造函数Person();protected:char* pName;#endifperson.cpp#include <iostream>#include <string>#include "person.h"using namespace std;Person:Person(char* pN)cout<<"constructing "<
8、<pN<<endl;pName=new charstrlen(pN)+1;if(pName!=0)strcpy(pName,pN);Person:Person(Person& p)/* *这个拷贝构造函数是必须的,原因是析构函数中使用deltete将堆空间返回给系统 *如果没有拷贝构造函数,而使用默认的拷贝构造函数,那么后面的程序中p1,p2将拥有完全相同的堆空间,在析构时,析构了p2后,堆空间已经返回给系统,再析构p1时,执行delete pName;就会出错*/cout<<"Copying"<<p.pName<&l
9、t;"into its own blockn"pName=new charstrlen(p.pName)+1;if(pName!=0)strcpy(pName,p.pName);Person:Person()cout<<"destructing"<<pName<<endl;pName0='0'delete pName; test.cpp/* *test.cpp *堆与拷贝构造函数的测试 *2011/10/7 *刘珅珅*/#include <iostream>#include <string>#include "person.h"using namespace std;int main(int argc,char* arg
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南洛阳老城区南关社区卫生服务中心招聘备考题库及答案详解(名师系列)
- 2026浙江嘉兴高级中学编外用工招聘2人备考题库含答案详解(模拟题)
- 武汉市某水土保持站招聘水土保持监测员1名备考题库含答案详解(完整版)
- 2026浙江宁波市江北区劳动和社会保障事务代理服务有限公司招聘1人备考题库及答案详解(必刷)
- 2026江西省肿瘤医院高层次人才招聘29人备考题库(13)带答案详解ab卷
- 2026福建泉州石狮市蚶江镇中心幼儿园教师、保育员招聘备考题库含答案详解(培优a卷)
- 2026重庆国创投资管理有限公司招聘4人备考题库及答案详解(各地真题)
- 2026海南三亚市市场监督管理局上半年招聘下属事业单位工作人员1人备考题库(第1号)含答案详解(a卷)
- 2026江苏苏州市吴中区社会福利中心招聘护理员1人备考题库带答案详解(轻巧夺冠)
- 2026福建泉州经济技术开发区第二实验幼儿园合同教师招聘1人备考题库附答案详解
- 2025年70周岁以上老年人换长久驾照三力测试题库(附含答案)4
- GB/T 42968.9-2025集成电路电磁抗扰度测量第9部分:辐射抗扰度测量表面扫描法
- 湖南省新高考教学教研联盟2026届高三年级12月联考(长郡二十校联盟)数学试卷(含答案)
- 2024-2025学年度陕西能源职业技术学院单招《职业适应性测试》考试历年机考真题集(易错题)附答案详解
- 保安机具管理办法
- 一元二次方程综合测试(中考真题)(含答案)
- GB/T 25922-2023封闭管道中流体流量的测量用安装在充满流体的圆形截面管道中的涡街流量计测量流量
- 中国哲学简史-冯友兰(英文版)
- 人教版七年级上册数学第三章《一元一次方程》100题(含答案)
- 工程造价咨询报价单
评论
0/150
提交评论