C++ 重载运算符号
本文针对结构体重载运算符号进行讲解
其实这是一个困扰我蛮久的问题,就是结构体如何使用sort函数进行排序,去网上找了很多,满多都是关于类的,虽然类跟结构体只有访问权限上的差别,但是很多地方还是有点不一眼的
先看例子
bool operator<(Point a,Point b){
return a.x < b.x;
}
以上就是一个 重载 < 号运算符号的示例
重载规则
首先 我们重载运算符号必须先明确哪些运算符号不可以重载
.:成员访问运算符.,
->:成员指针访问运算符
:::域运算符
sizeof:长度运算符
?: :条件运算符
#: 预处理符号
同时也需要满足以下4条规则
1、运算重载符不可以改变语法结构。
2、运算重载符不可以改变操作数的个数。
3、运算重载符不可以改变优先级。
4、运算重载符不可以改变结合性
为什么需要重载
首先我们必须要知道我们为什么重载运算符号,以上面的为例,如果我们要让结构体 Point数组按照Point.x 从小到大排序,那该如何实现,在C++中两个结构体直接比较毫无意义,所以我们必须要定义两个结构体的比较方法 也就是重载运算符号
重载关系运算符号
再回到上面的例子
首先 > < >= <= == != 都属于关系运算符号所以返回一个 bool 类型
然后我们需要比较是 .x 我们只需要把 原来直接比较 point 重新改成比较.x
就可以了
重载一元运算符号
我们继续来关注如何重载一元运算符号
++ – ! - */
void operator++(Point &a) {
a.x++;
}
这个函数就重载了 Point 函数的(左++) 符号
把 原本对于Point ++ 改成 Point.x++
有一点要注意应为需要更改原本 Point结构体内的值,务必要给一个引用(或者指针)
包括我们也可以重载-号和 ! 一下给出例子
void operator-(Point &a) {
a.x = -a.x;
}
当我们直接 -a 时就会把 a.x取反
-a
重载 二元运算符号
当然你也可以类似重载 + -
int operator+(Point &a, Point &b) {
return a.x + b.x;
}
当然我们我们也可以重载更多其他的运算符号来实现,不过目前暂时没有很大需求
重载赋值运算符号 重载赋值运算符号 你可以自定义在结构体赋值时哪些值需要背拷贝。
重载函数调用运算符号 你可以在使用结构体时传递任意参数用于计算
重载数组符号 你可以自由增强C的数组
例如增加数组的下标越界检测等等
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)