C++ 调用拷贝构造函数的三种情况。

三种情况如下:
1.对象作为函数参数,以值传递的方式传入函数体。
2.对象作为函数返回值,以值传递的方式从函数反回。
3.对象用于给另一个对象进行初始化。

下面通过例题来解释上面的三种情况:
例题如下:
在这里插入图片描述
问题:上面的结果输出是?

答案如下
在这里插入图片描述

解析:
1、首先从 B t1 = Play(5) 开始 :
Play(5) 调用了构造函数2 和 一次拷贝构造函数和,编译时先把 实参5 通过传参给 Play(B b)函数的形参,即 B b = 5; ( 或者B b(5); )这样便调用了构造函数2。因为对象b 作为函数的返回值返回,满足了上面的调用构造函数的第二条,所以调用拷贝构造函数
注意1:当我们 B t1 ; 这样定义对象会默认调用构造函数1,但是上面的写法是接受返回值所以不会去调用构造函数1;
注意2:不要和第三条混淆了,第三条是一个对象给另一个对象赋值,不是接受函数返回值。例如: B t3 ; B t4 = t3; 这样满足第三条
2、下面解释B t1 = Play(t1) :
它调用了两次 拷贝函数,首先看 Play(t1) ,是把实参 t1 ,传给形参 ,即 B b = t1; 满足第三条,一个对象给另一个对象赋值,调用拷贝构造,因为返回参数传给t2,和上面一样,满足第二条,再次调用拷贝构造。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值