#include<iostream>
#include<string>
#include<Ctime>
using namespace std;
//拷贝构造函数的使用时机
//1、使用一个已经创建完毕的对象来初始化一个新对象
//2、值传递的方式给函数参数传值
//3、值的方式返回局部对象
class person
{
public:
person() //默认构造函数
{
cout << "person默认构造函数的调用" << endl;
}
person(int age1)//有参构造初始化年龄
{
age = age1;
cout << "person有参构造函数的调用" << endl;
}
person(const person& p)
{
age = p.age;
cout << "person拷贝构造函数的调用" << endl;
}
~person()//析构函数
{
cout << "~person析构函数的调用" << endl;
}
int age;
};
//1、使用一个已经创建完毕的对象来初始化一个新对象
void test01()
{
person p1(20);//创建一个年龄20的对象 调用有参构造函数
person p2(p1);//使用拷贝构造 创建p2 调用拷贝构造函数
}//test01函数结束后调用两次析构函数
//2、值传递的方式给函数参数传值
void dowork(person p)//值传递的方式 给一个函数的参数进行传值
{
}
void test02()
{
person p;//会调用默认构造函数 创建一个对象
dowork(p);//调用dowork的时候把p传入 实参在传给形参的时候,调用一个拷贝构造函数 形参的p会照着实参的p拷贝一个新的数据
}
//3、值方式返回局部对象
person dowork2()
{
person p3; //先创建一个局部对象 函数执行完之后 就会被释放掉
cout << (int*)&p3 << endl;
return person(p3); //但是返回的不是p3本身 而是拷贝了p3返回
}
void test03()
{
person p4 = dowork2();//使用person p 接收这个数据
cout << (int*)&p4 << endl;
}
int main()
{
//test01();
//test02();
test03();
system("pause");//按任意键继续
return 0;//关闭程序
}
25类和对象——对象特性——拷贝构造函数调用时机
于 2023-07-11 15:33:19 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)