调用复制构造函数的3种情形

C++学习笔记(chapter4)

一、基础知识

1.何时会用到复制构造函数?
复制构造函数
2.为何要自定义复制构造函数?
类似于使用复印机,有时候需要放大或者缩小复印,有时候需要复制一部分内容遮挡舍弃一部分内容。
3.默认复制构造函数
在这里插入图片描述
4. 复制构造函数语法,使用本类对象作为参数
函数不允许返回值,函数体内不允许有return语句
复制构造函数不允许返回值,函数体内不允许有return语句。

二、代码测试

#include <iostream>
using namespace std;
class Point
{
    private:
int x;
int y;
    public:
Point()
{
    x=10;
    y=15;
}
Point(int a, int b)
{
    x=a;
    y=b;
}
Point(const Point &p)
{
    x=p.x;
    y=p.y;
    cout<<"calling copy constructer"<<endl;
}
int getx(){return x;}
int gety(){return y;}


};
/*以下函数在类体外定义,在类体内需要使用对象调用*/
void fun1(Point p)
{
    cout<<p.gety()<<endl;
}
Point fun2()
{
    Point a;
    return a;
}
int main()
{
    Point a;
    Point c(1,2);
    /*情形一:此处直接调用赋值构造函数进行对象赋值*/
    Point b(a);
    cout<<b.getx()<<endl;
   cout<<"the vallue of cx="<<c.getx()<<endl;
   /*情形二:此处形实结合传递类对象,通过赋值构造函数实现*/
    fun1(a);
    /*情形三:返回类对象,局部变量数据通过构造临时无名对象得以保存*/
    c=fun2();
    cout<<"the value of cx="<<c.getx()<<endl;
    return 0;
}

测试结果

VS2013中,如理论所述,调用3次赋值构造函数,但是在VSCODE中却只有两次调用,测试发现情形三并没有调用复制构造函数,
好奇怪?
在这里插入图片描述
在这里插入图片描述
—以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值