运算符+,-,*,/的重载https://blog.csdn.net/qq_58665528/article/details/122413141
有了上节的思考,我们再来想想运算符=的重载
1. 对于a = b(a.operator(b))我们不希望b的值被改变,所以参数b一定有const修饰,接着为了减少空间开销,提高运行效率,用引用要比创建一个新的Point对象要好的多,所以参数的类型为const Point&
2. 对于a = b = c(a.operator(b.operator(c)))这种连续赋值的行为我们是允许的,所以返回值类型首先要是Point,其次由于=左边的变量本就是要求被改动的,所以我们为了减少开销,提高效率,就返回左边变量的引用就行了,所以返回值类型为Point&
得出:Point& operator=(const Point& point)
class Point { private: int m_xPosition; int m_yPosition; public: Point(int xPosition = 0, int yPosition = 0); //构造函数 声明 Point& operator=(const Point& const); //重载运算符= 声明 }; //构造函数 定义 Point::Point(int xPosition, int yPosition) : m_xPosition(xPosition), m_yPosition(yPosition) {} //重载运算符= 定义 Point& Point::operator=(const Point& point) { this->m_xPosition = point.m_xPosition; this->m_yPosition = point.m_yPosition; return *this; }
根据上面的思考可得,+=,-=,*=,/=也是一个道理
class Point { private: int m_xPosition; int m_yPosition; public: Point(int xPosition = 0, int yPosition = 0); //构造函数 声明 Point& operator=(const Point& point); //重载运算符= 声明 Point& operator+=(const Point& point); //重载运算符+= 声明 Point& operator-=(const Point& point); //重载运算符-= 声明 Point& operator*=(const Point& point); //重载运算符*= 声明 Point& operator/=(const Point& point); //重载运算符/= 声明 }; //构造函数 定义 Point::Point(int xPosition, int yPosition) : m_xPosition(xPosition), m_yPosition(yPosition) {} //重载运算符= 定义 Point& Point::operator=(const Point& point) { this->m_xPosition = point.m_xPosition; this->m_yPosition = point.m_yPosition; return *this; } //重载运算符+= 定义 Point& Point::operator+=(const Point& point) { this->m_xPosition += point.m_xPosition; this->m_yPosition += point.m_yPosition; return *this; } //重载运算符-= 定义 Point& Point::operator-=(const Point& point) { this->m_xPosition -= point.m_xPosition; this->m_yPosition -= point.m_yPosition; return *this; } //重载运算符*= 定义 Point& Point::operator*=(const Point& point) { this->m_xPosition *= point.m_xPosition; this->m_yPosition *= point.m_yPosition; return *this; } //重载运算符/= 定义 Point& Point::operator/=(const Point& point) { if (point.m_xPosition != 0 || point.m_yPosition != 0) { this->m_xPosition /= point.m_xPosition; this->m_yPosition /= point.m_yPosition; } return *this; }