赋值运算符的重载
先简单回顾一下
C++编译器至少给一个类添加四个函数
- 默认构造函数(无参,函数体为空)
- 默认的析构函数(无参,函数体为空)
- 默认拷贝构造函数,对属性进行值拷贝
- 赋值运算符operator=,对属性进行值拷贝(这里问题就来了,浅拷贝和深拷贝的坑又来了———堆区内存重复释放因此要对简单的赋值即浅拷贝,重载成深拷贝)
这里注意:被赋值的一方要先进行判断是否本身有属性在堆区,如果有就释放干净,然后再进行深拷贝。
上面的程序有一点小问题:这样的赋值运算重载还不能实现链式编程;即(p1 = p2 = p3)
因为其返回值是void类型,要想实现链式编程返回值必须得是操作对象本身,谁指向调用成员函数的对象呢? 很显然是this,因此只需要返回*this即可;如下图:
关系运算符的重载
重载关系运算符,可以让两个自定义类型的数据进行比对操作。