拷贝构造函数详解VC.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
什么是拷贝构造函数 首先对于普通类型的对象來说,它们之间的复制是很简单的,例如: [c?sharp] view plain copy int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复朵,存在各种成员变量。 下面看一个类对象拷贝的简单例子。 [c-sharp] view plain copy #include iostream using namespace std; 3? 4. class CExample { 5? private: int a; public: //构造函数 TOC \o 1-5 \h \z CExample(int b) { a = b;} 11. 12? //一般函数 void Show () { coutaendl; } }; 18. int main() { CExample A(100); 22? CExample B = A; //注意这里的对象初始化要调用拷贝构造函数,而菲赋值 B.Show (); return 0; } 运行程序,屏幕输岀100。从以上代码的运行结果可以看出,系统为对象B分 配了内存并完成了与对彖A的复制过程。就类对彖而言,相同类型的类对彖是 通过拷贝构造函数来完成整个复制过程的。 下面举例说明拷贝构造函数的工作过程。 [c-sharp] view plain copy #include iostream using namespace std; 3? 4. class CExample { 5? private: int a; public: 〃构造函数 CExample(int b) { a = b;} 11. 12? //拷贝构造函数 CExample(const CExample C) TOC \o 1-5 \h \z { a = C.a; } 17. 18? 〃一般函数 void Show () { coutaendl; } }; 24. int main() { CExample A(100); CExample B = A; // CExample B(A);也是一样的 B.Show (); return 0; 31- } CExample(const CExamplc C)就是我们自定义的拷贝构造函数。可见,拷贝 构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一 个参数是木类型的一个引用变量。 拷贝构造函数的调用时机 在C++中,下面三种对彖需要调用拷贝构造函数! 对象以值传递的方式传入函数参数 [c-sharp] view plain copy class CExample 2?{ private: 1,4. int a; 5-6.7. 5- 6. 7. 8. 9. 10 ? lie 12. 13 ? 14. 15 ? 16. 17. 18 ? ? ? 21. 22. 23. 24. ? ? ? ? ? ? 31e 32. 33. 〃构造函数 CExample(int b) { a = b; coutf,creat: naendl; } 〃拷贝构造 CExample(const CExample C) { a = C.a; coutHcopyHendlj } 〃析构函数 ~CExample() { cout fdelete: Haendl; } void Show () { coutaendl; } }; 〃全局函数,传入的是对象 void g_Fun(CExample C) { 36 ? coutHtestendl; 37. } 38 ? 39? int main() 40. { 41. CExample test(l); 42. 〃传入对象 43 ? g_Fun(test); 44. 45. return 0; 46. } 调用g_Fun ()时,会产生以下几个重要步骤: . test对象传入形参时,会先会产生一个临时变量,就叫C吧。 ?然后调用拷贝构造函数把test的值给C。整个这两个步骤有点像: CExample C(test); .等g_Fun ()执行完后,析构掉C对象。 对象以值传递的方式从函数返回 [c?sharp] view plain copy class CExample { private: int a; 5. public: 〃构造函数 CExample(int b) 9?{ 10. a = b; } 12. 13?〃拷贝构造 CExample(const CExample C) 15?{ a = C?a; coutilcopy,,endl; TOC \o 1-5 \h \z } 19. void Show () 21? { 22? coutaendl;

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档