参考资料:黄邦勇帅(里面对于临时变量的说法我不是很理解,感觉里面的解释有问题)

用到复制构造函数的情况:

1.函数值传递

2.返回对象

3.用一个对象初始化另一个对象

重点注意下面两种情况:

① 只调用复制构造函数,不会生成临时变量

  A a = b;

② 会产生临时变量,会调用复制构造函数和赋值函数

  A a;

  a = A(b);

#include<iostream>
using namespace std;class hyong
{
public:int a, b, c;hyong(){a = b = c = 0;cout << "construct" <<endl;}hyong(int i){a = b = c = i;cout << "construct 2" <<endl;}hyong(const hyong &obj)  //复制构造函数
    {a = b = c = 9;cout << "construct copy" <<endl;}void h(hyong k) //值传递
    {cout << "k.a = " << k.a << " k.b = " << k.b<< endl;}hyong & hyong::operator = (const hyong & other){cout << "=" << endl;if(this == &other)return *this;a = other.a;b = other.b;c = other.c;return *this;}~hyong(){cout << "xigou" << endl;}
};hyong f() //返回对象
{hyong m3(5);return m3;
}int main()
{hyong m(1);hyong n = m;  //调用复制构造函数cout << m.a << m.b << endl;cout << n.a << n.b << endl;hyong m1 = hyong(m);  //调用复制构造函数cout << m1.a << m1.b << endl;hyong m2(m);    //调用复制构造函数cout << m2.a << m2.b << endl;hyong *p = new hyong(m);  //调用复制构造函数cout << p->a << p->b << endl;cout << "------------"<< endl;hyong m3;m3 = hyong(m); //先用复制构造函数得到了一个临时变量,然后用赋值函数将临时变量值赋给m3, 之后临时变量析构cout << "------------"<< endl;hyong m4;m4 = m; //直接调用赋值cout << "------------"<< endl;hyong m5 = f();    // 设f()返回的临时变量为r,其实r就是函数里的m3,//m3通过复制构造函数赋给m5,之后m3析构cout << "------------"<< endl;hyong m6;          //先定义,并用默认构造函数初始化了m6m6 = f();          //f()返回m3, 然后用复制构造函数将m3赋给了临时变量tmp, m3析构;//tmp通过赋值函数赋给m6, tmp析构cout << "------------"<< endl;hyong m7(f());     // 设f()返回m3,m3通过复制构造函数赋给m7,之后m3析构return 0;
}

转载于:https://www.cnblogs.com/dplearning/p/4783626.html

【C++】复制构造函数相关推荐

  1. C++ 复制构造函数或者拷贝构造函数

    复制构造函数 是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象. 复制构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象. 复制对象把它作为参数传 ...

  2. 复制构造函数(拷贝构造函数)

    也许很多C++的初学者都知道什么是构造函数,但是对复制构造函数(copy constructor)却还很陌生.对于我来说,在写代码的时候能用得上复制构造函数的机会并不多,不过这并不说明复制构造函数没什 ...

  3. C++深复制(深拷贝)、浅复制(浅拷贝)和复制构造函数(拷贝构造函数)详解+实例

    转载出处:https://blog.csdn.net/sxhelijian/article/details/23209967 对象的复制 对于普通类型的对象来说,它们之间的复制是很简单的,例如: in ...

  4. C++拷贝构造函数(复制构造函数)详解

    link 复制构造函数是构造函数的一种,也称拷贝构造函数,它只有一个参数,参数类型是本类的引用. 如果类的设计者不写复制构造函数,编译器就会自动生成复制构造函数.大多数情况下,其作用是实现从源对象到目 ...

  5. 复制构造函数 与 赋值函数 的区别

    构造函数.析构函数.赋值函数是每个类最基本的的函数.每个类只有一个析构函数和一个赋值函数.但是有很多构造函数(一个为复制构造函数,其他为普通构造函数.对于一个类A,如果不编写上述四个函数,c++编译器 ...

  6. 验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型

    验证 Boost.Optional 复制构造函数不会尝试调用从模板化参数初始化构造函数的元素类型 实现功能 C++实现代码 实现功能 验证 Boost.Optional 复制构造函数不会尝试调用从模板 ...

  7. C++何时调用拷贝(复制)构造函数

    StringBad ditto (motto); StringBad metoo = motto; StringBad also = StringBad(motto); StringBad * pSt ...

  8. 编译器角度看C++复制构造函数

    [C++对象模型]复制构造函数的建构操作 关于复制构造函数的简单介绍,可以看我以前写过的一篇文章C++复制控制之复制构造函数该文章中介绍了复制构造函数的定义.调用时机.也对编译器合成的复制构造函数行为 ...

  9. C++ 复制构造函数

    C++类的设计中,如果某些函数没有显式定义,C++会自动生成,复制构造函数便是其中之一,其他的还有默认构造函数.赋值操作符.默认析构函数.地址操作符.一个类的复制构造函数的原型一般为: Class_n ...

最新文章

  1. java.util.ConcurrentModificationException异常原因及解决方法
  2. 【EventBus】事件通信框架 ( 订阅方法注册 | 注册 事件类型 - 订阅类 + 订阅方法 到指定集合 | 取消注册 数据准备 )
  3. 判断远程图片是否存在的JavaScript代码
  4. TSP - 状态压缩dp
  5. 841. Keys and Rooms 钥匙和房间
  6. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
  7. flink整合java,Flink使用SideOutPut替换Split实现分流
  8. css_02 | CSS——CSS 选择器详解
  9. 如何建立开发环境可以让开发人员快捷开发出模型的原型
  10. 微信小程序数据库关于openId的坑
  11. 关于Win10 driver irql not less or equal ndis.sys的个人解决过程
  12. python plot_surface 画表面网格图
  13. python舞蹈链数独游戏
  14. 13.56Mhz下50欧姆阻抗匹配简易教程
  15. 淘淘商城---8.7
  16. 三层交换机 原理解析
  17. 应用卸载后依然存在的文件目录
  18. 计算机的应用主要有哪几个,计算机的应用主要有哪几个方面?
  19. 生存战争2.2联机版游戏介绍
  20. 小度送音箱,这是只属于开发者的福利

热门文章

  1. 大白话5分钟带你走进人工智能-第十节梯度下降之归一化的各种方式和必要性(5)...
  2. java生成二维码/java解析二维码
  3. jQuery动态操作表单
  4. leetcode之Divide Two Integers
  5. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
  6. C#开发C/S结构如何通信的问题?
  7. [MicroPython]TPYBoard v102 CAN总线通信
  8. SimpliSafe安防系统存高危漏洞:窃贼可轻易攻破
  9. CentOS 7 安装 MySQL
  10. 惊闻谢文离职雅虎中国