C++运算符重载之+,-,*,/

运算符“+”的重载

class Point {
private:
	int m_xPosition;
	int m_yPosition;

public:
	Point(int xPosition = 0, int yPosition = 0);		//构造函数  声明
	const Point operator+(const Point& point) const;	//重载运算符+  声明
	
};

//构造函数  定义
Point::Point(int xPosition, int yPosition) : m_xPosition(xPosition), m_yPosition(yPosition) {}

//重载运算符+  定义
const Point Point::operator+(const Point& point) const {
	return  Point(this->m_xPosition + point.m_xPosition, this->m_yPosition + point.m_yPosition);
}

现在让我们思考一下,为什么要把运算符+的重载写的这么“复杂”?

首先,由于我把重载函数写成了成员函数,所以a + b就相当于a.operator+(b),+左边的变量将视为函数调用者,右边的将视为参数。

所以a+b实际上就是函数调用,既然这样就得好好考虑返回值类型以及参数类型

1.  显然我们不希望,a+b的过程中a的值或者b的值发生变化,所以参数的类型一定有const修饰符,接着引用可以很好的减少额外资源的开销,提高效率,所以参数的类型就确定了,是const Point&

2. 我们希望能够实现连+,比如(a + b + c)这相当于(a.operator+(b).operator+(c)),所以函数的返回值类型肯定是Point

3. 我们还希望这个函数有一定的自检功能如(a + b = c)这种毫无意义的等式能够鉴别出来,因为有时候我们会把如(a + b == c)写成(a + b = c)。所以返回值类型要是const,因为const变量不能被赋值,但又因为const对象只能调用const函数。

所以综上三种原因得出:const Point operator+(const Point& point) const;的函数声明

由此分析我们马上可以得出,+,-,*,/ 的重载函数大体都是一样的。

class Point {
private:
	int m_xPosition;
	int m_yPosition;

public:
	Point(int xPosition = 0, int yPosition = 0);		  //构造函数  声明
	const Point operator+(const Point& point) const;	//重载运算符+  声明
	const Point operator-(const Point& point) const;	//重载运算符-  声明
	const Point operator*(const Point& point) const;	//重载运算符-  声明
	const Point operator/(const Point& point) const;	//重载运算符-  声明

};

//构造函数  定义
Point::Point(int xPosition, int yPosition)
	: m_xPosition(xPosition), m_yPosition(yPosition) {}

//重载运算符+  定义
const Point Point::operator+(const Point& point) const {
	return  Point(this->m_xPosition + point.m_xPosition, this->m_yPosition + point.m_yPosition);
}

//重载运算符-  定义
const Point Point::operator-(const Point& point) const {
	return  Point(this->m_xPosition - point.m_xPosition, this->m_yPosition - point.m_yPosition);
}

//重载运算符*  定义
const Point Point::operator*(const Point& point) const {
	return  Point(this->m_xPosition * point.m_xPosition, this->m_yPosition * point.m_yPosition);
}

//重载运算符/  定义
const Point Point::operator/(const Point& point) const {
	if(point.m_xPosition != 0 || point.m_yPosition != 0)
		return  Point(this->m_xPosition / point.m_xPosition, this->m_yPosition / point.m_yPosition);
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值