下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- AI大数据分析古代典籍天文历法
- 2026年陕西工业职业技术学院单招职业适应性测试题库及答案
- 公域获客实战:从「被看见」到「被转化」的完整流量闭环
- 2026年保安员资格证考试判断题题库及答案(共50道题)
- 附近商家系统课程课程设计
- 餐饮菜品课程设计
- 迟滞比较器电路课程设计
- cpld 课程设计多路彩灯
- 数字示波器设计(FPGA实现)信号处理课程设计
- 强化学习效果优化设计课程设计
- 【三上英语】25秋三年级上册通 用版英语《字母每日一练》(附答案)
- 2026云南昆明市儿童医院第二批招聘编制外工作人员8人考试模拟试题及答案详解
- 国家心力衰竭指南2023(全文版)
- 自动控制原理-二阶系统的时域响应
- 沈阳水务集团笔试试题
- 任务6.2 M7140型平面磨床电气控制线路的分析与检修
- 2026-2030中国煤制氨行业市场发展分析及发展趋势与投资前景研究报告
- 中国胃镜检查与治疗指南(2026版)
- 2026年中级消防员考试模拟卷解析
- 基层医疗机构皮下注射操作规范
- 《红星照耀中国》导读激趣课教学设计王浩
评论
0/150
提交评论