25类和对象——对象特性——拷贝构造函数调用时机

文章介绍了C++中拷贝构造函数的作用,包括用已创建的对象初始化新对象、值传递给函数参数以及值方式返回局部对象时的使用。通过示例代码展示了拷贝构造函数在不同情况下的调用,同时提到了析构函数的调用顺序。
摘要由CSDN通过智能技术生成
#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;//关闭程序
} 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值