拷贝构造函数01.pptVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
拷贝构造函数01

Main.cpp couta=; a.print(); coutc=; c.print(); f(b); c = a.add(b); c.print(); } 结果 结果分析 可以看到,在执行f(b)时,没有调用拷贝构造函数,这点和Example 1是不同的,因为这里传递的是实参b的引用。 同样,在执行c = a.add(b)时,和Example 1相比,少调用了一次拷贝构造函数,即实参b传递给形参时,没有调用拷贝构造函数,因为传递的是实参b的引用。 总结 分析总结可以得出,调用拷贝构造函数的情况有三种: (1)明确表示由一个对象初始化另一个对象,如Cdate day(d1)。 (2)当对象作为函数实参传递给函数形参时,如fun(Cdate d1)。 (3)当对象作为函数的返回值,创建一个临时对象。 总结 如果传递给函数的形参是对象的引用,则传递时不会调用函数的拷贝构造函数。 至于为什么向函数的形参传递对象的引用时,不调用拷贝构造函数,这里涉及很多关于引用的知识,这里不给予介绍,感兴趣的读者可以参考其他书籍。 * C++的拷贝构造函数 深入理解拷贝构造函数 版权声明 该文档参考了郑秋生主编的《C/C++程序设计教程-----面向对象分册》,并加入了本人自己的理解,如果有错误或者理解不恰当的地方,还望指出 拷贝构造函数 C++允许同型变量之间的赋值,例如,int a = 100; int b = a; 对象是一种复杂的类类型,很多时候我们需要用一个对象去创建另外一个对象,或者将一个对象赋值给另一个对象,这时就需要用到拷贝构造函数。 拷贝构造函数的定义格式 拷贝构造函数的定义格式如下: 类名::拷贝构造函数名(类名 引用名) 例如: Cdate::Cdate(Cdate c) //形参是对象的引用 Cstring(const Cstring str) //形参是一个const的对象引用 调用拷贝构造函数的情形 通常在以下三种情况下,需要调用拷贝构造函数: (1)明确表示由一个对象初始化另一个对象,如Cdate day(d1)。 (2)当对象作为函数实参传递给函数形参时,如fun(Cdate d1)。 (3)当对象作为函数的返回值,创建一个临时对象。 Example 1 设计一个复数类,两个数据成员分别表示虚数的实部和虚部。 两个构造函数分别在不同的情况下初始化对象,add函数完成两个虚数的加法,print函数用于输出函数。 Complex.h 复数类的定义放在Complex.h中 #ifndef _COMPLEX_H #define _COMPLEX_H class Complex { public: Complex(double r,double i); Complex(Complex c); Complex add(Complex c); void print(void); private: double real,image; }; #endif Complex.cpp #includeComplex.h #includeiostream.h Complex::Complex(double r,double i):real(r),image(i) { cout调用两个参数的构造函数endl; } Complex::Complex(Complex c) { real = c.real; image = c.image; cout调用拷贝构造函数endl; } Complex.cpp void Complex::print(void) { cout(real,image)endl; } Complex Complex::add(Complex c) { Complex y(real + c.real,image + c.image); return y; } Complex.cpp void f(Complex n) { cout“n=; n.print(); } Main.cpp #includeComplex.h #includeiostream.h extern void f(Complex n); void main(void) { Complex a(3.0,4.0),b(5.6,7.9); Complex c(a); Main.cpp couta=; a.print(); coutc=; c.print(); f(b); c = a.add(b); c.print(); } 程序结果 结果分析 程序开始定义了两个复数类对象a和b,所以调用复数类的构造函数,输出前两行。 执行语句Complex c(a),

文档评论(0)

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

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

1亿VIP精品文档

相关文档