一、+运算符重载
1.考虑运算符重载函数参数个数--是否为成员函数
因为该函数时成员函数,到时候是通过对象调用该函数,即P1+P2相当于 P1.operrator+(P2);
此处P1地址会传给operator函数中的this指针,此处省略了this指针。
return Point(this->m_x + point.m_x, this->m_y + point.m_y);
2.考虑保留运算符特性--是否对返回值赋值
因为(a+b)=5;这种情况是不能赋值的,所以在类的加法也需要保留该特性。
令返回值对象为常量对象,则不能用另一个对象对返回值赋值。
3.考虑返回值类型--对象
因为返回值不能赋值,则不能返回一个确定的对象,只能返回临时对象。
4.考虑保留运算符特性--是否满足连续加
P4=P3+P2+P1;//等价于p3.operator+(p2).operator+(P1)
此时调用函数p3.operator+(p2)返回的是一个常量对象,众所周知,常量对象不能调用非常量函数 ,所以需要设置operator+为const函数。
二、+=运算符重载
1.考虑运算符重载函数参数个数--是否为成员函数
因为该函数时成员函数,到时候是通过对象调用该函数,即P1+=P2相当于 P1.operrator+=(P2);
此处P1地址会传给operator函数中的this指针,此处省略了this指针。
return Point(this->m_x + point.m_x, this->m_y + point.m_y);
2.考虑保留运算符特性--是否对返回值赋值
因为(a+=b)=5;这种情况可以赋值的,所以在类的加法也需要保留该特性。
令返回值对象为普通对象,可以赋值。
3.考虑返回值类型--当前对象
因为返回值可以赋值,则返回当前对象,返回值类型设置为&。
4.考虑保留运算符特性--是否满足连续加
因为返回值非const类型,则也不需要const函数