版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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广东广州市黄埔军校小学招聘7人农业考试备考题库及答案解析
- 2026中国药科大学继续教育学院人员招聘1人(江苏)农业笔试参考题库及答案解析
- 2026吉林松原市扶余市事业单位选拔招聘44人(2号)农业笔试模拟试题及答案解析
- 2026四川长虹电源股份有限公司招聘电气测试工程师等岗位7人农业笔试备考试题及答案解析
- 2025至2030公共工程基础设施项目的先进材料和技术行业市场深度研究及发展前景投资可行性分析报告
- 2025至2030中国骨骼发育不良的治疗行业项目调研及市场前景预测评估报告
- 2026福建省高速公路养护工程有限公司招聘5人农业考试备考试题及答案解析
- 2025至2030中国蒽醌行业项目调研及市场前景预测评估报告
- 2026四川成都中医药大学第三附属医院招聘超声医生1人农业笔试备考题库及答案解析
- 2025至2030中国生物属药物行业项目调研及市场前景预测评估报告
- 子女抚养权协议书
- 情志养生的方法
- 2022年全国青少年人工智能创新挑战赛考试题库(含答案)
- (完整)抗菌药物培训试题库及答案
- 现场5S改善对比图片示例现场5S示范区改善前后对比图片
- 房屋建筑混凝土结构设计形考 1-4
- 联通商企客户经理销售指导手册
- 三国全面战争秘籍大全
- 上海六年级短片文言文《吕氏春秋》精选阅读
- 新版冀教版科学四年级下册全册教案(双面打印)
- 压力钢管安全检测技术规程NB∕T 10349-2019
评论
0/150
提交评论