复制构造函数的调用时机
//每日心得:独上高楼,望尽天涯路
//日期: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;
}