简单运算符重载

运算符重载的规则:

  • 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为
  • 例如string类里面可以通过"str1 += str2"实现两个字符串的拼接
  • C++几乎可以重载全部的运算符,而且只能够重载C++中已经有的
  • 以下五个运算符不能重载:"."  ".*" "::"  "?:"  "sizeof"
  • 重载之后运算符的优先级和结合性都不会改变
  • 运算符重载同等于函数,可以为类的非静态成员函数,也可以为非成员函数(暂略)


重载为类成员的运算符函数定义形式:

返回类型 operator 运算符(形参)
{
	……
}

参数个数 = 原操作数个数-1(后置++、--除外)

例如如果你想实现两个字符串拼接直接用"str1 += str2",那么形参应该只有一个,并且在调用重载函数时传入的实参应该是str2

经过重载后,"temp = str1 += str2"就相当于"temp = str1.operator + (str2)"


单目运算符重载:https://blog.csdn.net/jaihk662/article/details/79830654

运算符重载的非成员函数形式:https://blog.csdn.net/jaihk662/article/details/79830704


#include<stdio.h>
class Point
{
	int x, y;
	public:
		Point(int x, int y)
		{
			this->x = x;
			this->y = y;
		}
		Point operator + (const Point &b) const
		{
			return Point(x+b.x, y+b.y);
		}
		Point operator - (const Point &b) const
		{
			return Point(x-b.x, y-b.y);
		}
		int operator < (const Point &b) const
		{
			if(x<b.x || x==b.x && y<b.y)
				return 1;
			return 0;
		}
		void Out()  {  printf("%d %d\n", x, y);  }
};
int main(void)
{
	Point a(3, 5), b(7, 7);
	(a+b).Out();
	(a-b).Out();
	if(a<b)
		printf("YES\n");
	return 0;
}
/*
10 12
-4 -2
YES
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值