运算符重载的规则:
- 运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为
- 例如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
*/