c++学习--多态--运算符重载(1)

一、+运算符重载

c++学习--多态--运算符重载(1)_第1张图片

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函数。

二、+=运算符重载

c++学习--多态--运算符重载(1)_第2张图片

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函数

你可能感兴趣的:(C++入门)