#include <iostream>
#include <string>
using namespace std;
/*
c++编译器至少给一个类添加四个函数
1.默认构造函数
2.默认析构函数
3.默认拷贝函数,对属性进行值拷贝:浅拷贝就是拷贝对属性值进行简单的拷贝 深拷贝就是在堆区内存进行拷贝
4.赋值运算符 operator=对属性进行值拷贝
*/
class Person
{
public:
Person(int mage)
{
age = new int(mage); // 在堆区开辟的数据会返回一个指针
}
~Person()
{
if (age != NULL)
{
delete age;
age = NULL;
}
}
// 这里不返回值的原因是 返回值也会调用一次拷贝函数 拷贝函数默认浅拷贝 如果我们自己写一个深拷贝 待会析构函数又要重复释放堆区内容引发异常
Person &operator=(Person &p)
{
// 先判断是否有属性在堆区 如果有先释放完再进行深入拷贝
if (age != NULL)
{
delete age;
age = NULL;
}
age = new int(*p.age);
// 返回*this 返回引用是返回真正的自身
return *this;
}
int *age;
};
void test()
{
Person p1(120);
Person p2(30);
Person p3(1);
p3 = p2 = p1; // =号重载后 实现了深拷贝
cout << *p1.age << endl;
cout << *p2.age << endl;
cout << *p3.age << endl;
}
int main()
{
test();
return 0;
}
C++ operator=
最新推荐文章于 2023-08-02 21:00:00 发布