赋值运算符和拷贝构造的区别&理解

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;

class PerSon
{
public:
	int p_age;
	char *p_name;
public:

	PerSon(char* v_name,int v_age)
	{
		this->p_age = v_age;
		// 构造名字
		this->p_name = new char[strlen(v_name)+1];
		strcpy(this->p_name, v_name);

		cout<<"赋值构造函数"<<endl;
	}

	PerSon(const PerSon &v_person)
	{
		this->p_age = v_person.p_age;
		this->p_name = new char[strlen(v_person.p_name)+1];
		strcpy(this->p_name, v_person.p_name);

		cout<<"拷贝构造函数"<<endl;
	};

	PerSon& operator=(const PerSon &v_person)
	{
		if (this->p_name != NULL)
		{
			delete[] this->p_name;
			this->p_name = NULL;
		}
		this->p_age = v_person.p_age;
		this->p_name = new char[strlen(v_person.p_name)+1];
		strcpy(this->p_name,v_person.p_name);
		
		cout<<"赋值运算符重载"<<endl;
		return *this;
	}

	~PerSon()
	{
		if (this->p_name != NULL)
		{
			cout<<"进来吗"<<endl;
			delete[] this->p_name;
			this->p_name = NULL;
		}
		cout<<"析构函数"<<endl;
	};
};


void test_01(void)
{
	PerSon p1("cczhai",27);
	PerSon p2 ("xuejing",30);
	PerSon p3 = p2;  // 拷贝构造函数
	p3 = p2 = p1;	// 运算符重载
	cout<<"p1的名字为"<<p1.p_name<<"  "<<"p1的年龄为"<<p1.p_age<<endl;
	cout<<"p2的名字为"<<p2.p_name<<"  "<<"p2的年龄为"<<p2.p_age<<endl;
	cout<<"p3的名字为"<<p3.p_name<<"  "<<"p3的年龄为"<<p3.p_age<<endl;
}

int main()
{
	test_01();

	system("pause");
	return EXIT_SUCCESS;
}

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值