




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025内蒙古自治区农牧业科学院招聘48人考前自测高频考点模拟试题及答案详解(夺冠系列)
- 出纳转正月度工作总结4篇
- 2025江西吉安市文化旅游投资发展集团有限公司及下属子公司招聘10人(第一批)考前自测高频考点模拟试题及答案详解(各地真题)
- 2025年延安东辰中学教师招聘考前自测高频考点模拟试题及1套参考答案详解
- 2025年福建省厦门海沧华附实验小学招聘1人考前自测高频考点模拟试题及参考答案详解一套
- 2025年威海火炬高技术产业开发区公开招聘教师(第二批)(61人)考前自测高频考点模拟试题及完整答案详解
- 2025国网山西省电力公司博士后科研工作站招聘1人考前自测高频考点模拟试题附答案详解(典型题)
- 2025湖北咸宁市通城县事业单位高层次和急需紧缺人才引进48人考前自测高频考点模拟试题及1套完整答案详解
- 2025湖南邵阳市新宁产业开发区选调5人模拟试卷含答案详解
- 2025广西南宁市人民路东段小学春季学期教师招聘1人模拟试卷附答案详解(完整版)
- 2025年度国家电投校园招聘模拟试卷及答案详解(历年真题)
- 钢厂吊装安全培训课件
- 德育教育 课题申报书
- 维生素D佝偻病课件
- 液压实训安全培训课件
- 义齿行业安全教育培训课件
- 第8课《回忆鲁迅先生》公开课一等奖创新教学设计 统编版语文八年级上册
- 胆结石课件教学课件
- 第2课《中国人首次进入自己的空间站》课件+2025-2026学年统编版语文八年级上册
- 耳灸疗法护理操作规范
- 2025年卫生知识健康教育知识竞赛-医疗质量与安全管理知识竞赛历年参考题库含答案解析(5套典型题)
评论
0/150
提交评论