赋值运算符重载

2023-12-27 06:29:34

C++编译器至少给一个类添加四个函数

1.默认构造函数(无参,函数体为空)

2.默认析构函数(无参,函数体为空)

3.默认拷贝构造函数,对属性进行值拷贝

4.赋值运算符operator=,对属性进行拷贝

如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝的问题

#include<iostream>
using namespace std;
class Person
{
public:
	Person(int age)
	{
		//将年龄开辟到堆区
		m_Age = new int(age);
	}
	~Person()
	{
		if (m_Age != NULL)
		{
			delete m_Age;
			m_Age = NULL;
		}
	}
	//重载赋值运算符
	Person& operator=(Person& p)
	{
		if (m_Age != NULL)
		{
			delete m_Age;
			m_Age = NULL;
		}
		//提供深拷贝,解决浅拷贝的问题
		m_Age = new int(*p.m_Age);
		return *this;
	}
	//年龄的指针
	int* m_Age;
};
void test01()
{
	Person p1(18);
	Person p2(20);
	Person p3(30);
	p3 = p2 = p1;//连续赋值操作
	cout << *p1.m_Age << endl;
	cout << *p2.m_Age << endl;
	cout << *p3.m_Age << endl;

}
int main()
{
	test01();
	return 0;
}

文章来源:https://blog.csdn.net/xms12_3/article/details/135231418
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。