复制构造函数的调用时机

复制构造函数的调用时机

//每日心得:独上高楼,望尽天涯路
//日期:12.14
//学习内容:复制构造函数的调用时机
//重点:

//1、用已知变量 去复制 新定义的变量
//2、值传递的方式给函数参数传值
//3、以值的方式返回局部对象
//4、调用复制构造函数后,系统不提供默认构造函数(定义类的时候,需要构造和复制都有)

#include <iostream>
using namespace std;

class Person
{
public:
    Person()
    {
        cout << "person 的默认构造函数调用!" << endl;
    }
    Person(const Person& p)
    {
        cout << "person 的复制构造函数调用!" << endl;
    }
private:
    int age = 0;
};
//2、值传递的方式给函数参数传值
void work(Person p1) //传值调用一次 复制构造函数 (新建一个变量 -> 储存值)
{
    //p1 是形参 ; p 是实参 
    //只要没有 引用(起别名) 没有调用复制构造函数 且 函数无法改变实参
    //如果引用,则只有 const 来防止 函数 改变实参
}
void test1()
{
    Person p;
    work(p);
}
//!!!3、值方式返回局部对象
Person dowork()
{
    Person p2; //局部变量 函数结束销毁
    cout << "p2 的地址为" << (int*)&p2 << endl;
    return p2; //最后返回类里 数据值 ,变量销毁 (在栈区)
}

//调用函数时 返回一个 person 类的变量 (以p2 为形参 调用复制构造函数 ) 

void test2()
{
     Person p3 = dowork(); // 相当于 Person p3 = Person 
     cout << "p3 的地址为" << (int*)&p3 << endl;
     // &p2 != &p3      dowork()返回的不是p2
}
int main()
{
    test1();
    //test2();
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值