- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C拷贝构造函数详解
C++拷贝构造函数详解(深复制和浅复制)一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp]?view plaincopyint?a?=?100;??int?b?=?a;???而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-sharp]?view plaincopy#include?iostream??using?namespace?std;????class?CExample?{??private:?????? int?a;??public:????????//构造函数?????? CExample(int?b)?????? {?a?=?b;}??????????//一般函数?????? void?Show?()?????? {??????????coutaendl;????????}??};????int?main()??{?????? CExample?A(100);?????? CExample?B?=?A;?//注意这里的对象初始化要调用拷贝构造函数,而非赋值?????? ?B.Show?();?????? return?0;??}??运行程序,屏幕输出100。从以上代码的运行结果可以看出,系统为对象 B 分配了内存并完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。下面举例说明拷贝构造函数的工作过程。[c-sharp]?view plaincopy#include?iostream??using?namespace?std;????class?CExample?{??private:??????int?a;??public:??????//构造函数??????CExample(int?b)??????{?a?=?b;}????????????//拷贝构造函数??????CExample(const?CExample?C)??????{??????????a?=?C.a;??????}????????//一般函数??????void?Show?()??????{??????????coutaendl;??????}??};????int?main()??{??????CExample?A(100);??????CExample?B?=?A;?//?CExample?B(A);?也是一样的???????B.Show?();??????return?0;??}???CExample(const CExample C) 就是我们自定义的拷贝构造函数。可见,拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。二. 拷贝构造函数的调用时机在C++中,下面三种对象需要调用拷贝构造函数!1. 对象以值传递的方式传入函数参数[c-sharp]?view plaincopyclass?CExample???{??private:???int?a;????public:???//构造函数???CExample(int?b)???{?????a?=?b;????coutcreat:?aendl;???}?????//拷贝构造???CExample(const?CExample?C)???{????a?=?C.a;????coutcopyendl;???}??????//析构函数???~CExample()???{????cout?delete:?aendl;???}?????????void?Show?()???{???????????coutaendl;???????}??};????//全局函数,传入的是对象??void?g_Fun(CExample?C)??{???couttestendl;??}????int?main()??{???CExample?test(1);???//传入对象???g_Fun(test);?????return?0;??}??调用g_Fun()时,会产生以下几个重要步骤:(1).test对象传入形参时,会先会产生一个临时变量,就叫 C 吧。(2).然后调用拷贝构造函数把test的值给C。 整个这两个步骤有点像:CExample C(test);(3).等g_Fun()执行完后, 析构掉 C 对象。2. 对象以值传递的方式从函数返回[c-sharp]?view plaincopyclass?CExample???{??private:???int?a;????public:???//构造函数???CExample(int?b)???{?????a?=?b;???}?????//拷贝构造???CExam
您可能关注的文档
- chapter树和叉树.ppt
- chapter矿物.ppt
- Chapter点对点信道的数据链路层.ppt
- Chapter空间信息模型分析.ppt
- chapter随机线性系统的最优控制.ppt
- chapter游戏图像处理.pptx
- chapter非线性电路—无动画.ppt
- Chapter选择结构.ppt
- chapter细胞概述.pdf
- chapt暨南大学微观经济学课件.ppt
- DB32T3444 健康企业评估规范.pdf
- DBJ25-82-2000 甘肃省聚苯板外保温墙体设计与施工规程 甘肃省地方标准.pdf
- DB32T-核与辐射突发事件卫生应急处置技术规范 第3部分:现场流行病学调查及编制说明.pdf
- DB44T1430-2014 冷冻水产品流通冷链管理技术规范.pdf
- TCASME-监控系统安装与维护规范.pdf
- TCSAE-汽车远程升级(OTA)信息安全测试规范.pdf
- TJSSAE-智能网联汽车开放道路测试管理要求及编制说明.pdf
- TEERT-挥发性有机物污染治理设施工况自动监控技术规范.pdf
- TCASME-三跨连续节段梁悬浇施工技术规范.pdf
- DB36T-行政执法案卷评查规范编制说明.pdf
最近下载
- (完整版)初三化学方程式大全.pdf
- 卫健委临检中心 15项临床检验质量控制指标——解读与应用.pptx VIP
- GB/T 14165-2008_金属和合金 大气腐蚀试验 现场试验的一般要求.pdf
- NB∕T11502-2024光伏光热一体组件和空气源热泵联合热水系统通用技术条件.pdf
- 抖音粉丝群体数据分析报告.pptx
- 【国家标准】QBT 3826-1999 轻工产品金属镀层和化学处理层的耐腐蚀试验方法 中性盐雾试验(NSS)法.pdf
- 足部特效反射区疗法一览表 附足底穴位图.doc
- 按次收费合同5篇.docx VIP
- 棋类运动协会章程.docx
- 口腔科的2024年工作总结6篇.docx VIP
文档评论(0)