下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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年铜川市新区审判庭招聘法官助理、司法辅助人员(8人)笔试考试备考试题及答案解析
- 商业保险顾问岗位面试题库及答案参考
- 高级销售顾问客户关系管理面试题及答案解析
- 2025广西南宁宾阳县“点对点”送工和乡村公岗专管员招聘1人考试笔试模拟试题及答案解析
- 市场分析师面试考核要点及答案
- 编程逻辑思维与测试题解析集
- 宠物美容师技能提升培训合同2025
- 2025年中职(美发与形象设计)时尚盘发技术试题及答案
- 2025年高职市政工程技术(市政桥梁施工技术)试题及答案
- 氢能与燃料电池-课件-第五章-制氢技术
- 科研伦理与学术规范-课后作业答案
- 交通银行跨境人民币业务介绍
- GB/T 33636-2023气动用于塑料管的插入式管接头
- 旅游地理学 国家公园建设与管理
- JJF(石化)036-2020漆膜附着力测定仪(划圈法)校准规范
- 诊所医生聘用合同(3篇)
- JJG 693-2011可燃气体检测报警器
- 美拉德反应课件
- 可再生能源领域:阳光电源企业组织结构及部门职责
- 电脑节能环保证书
评论
0/150
提交评论