操作符重载
Posted jianw1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作符重载相关的知识,希望对你有一定的参考价值。
C++中,不同类型的数据有很多的运算符,如加减乘除等。当我们在定义两个不同类结构体时,我们发现,两个对象之间是不能进行这些操作的,如:
#include<iostream> using namespace std; struct Point int x, y; Point(int x = 0, int y = 0) :x(x), y(y) ; ; ostream& operator << (ostream & out, const Point & p) out << "(" << p.x << "," << p.y << ")"; return out; int main() Point a, b(1, 2); a.x = 3; cout << a + b << "\\n"; return 0;
运行结果:
所幸,C++允许用户把运算符添加到自己的类中,以方便运算
经过查阅我们发现,运算符重载分为重载为类的非成员函数与重载为成员函数,在此简略将其语法形式归为:
返回类型 operator 运算符(形参表)
函数体
那么放在本代码里就是:
1 //应添加 2 Point operator +(const Point& A ,const Point& B) 3 return Point(A.x + B.x, A.y + B.y); 4
现在我们来对代码进行改正:
1 #include<iostream> 2 using namespace std; 3 4 struct Point 5 int x, y; 6 Point(int x = 0, int y = 0) :x(x), y(y) ; 7 ; 8 9 Point operator +(const Point& A ,const Point& B) 10 return Point(A.x + B.x, A.y + B.y); 11 12 ostream& operator << (ostream& out, const Point& p) 13 out << "(" << p.x << "," << p.y << ")"; 14 return out; 15 16 int main() 17 18 Point a, b(1, 2); 19 a.x = 3; 20 cout << a + b << "\\n"; 21 return 0; 22
运行结果:
即实现了(1,2)和(3,0)相加
卡了卡了…
运算符重载的规则如下:
(1) C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已经有的运算符
(2) 重载之后运算符的优先级和结合性都不会改变
(3) 运算符重载是对原有运算符进行适当的改造,功能应与原操作符相似,不能改变原操作符的对象个数,同时至少有一对象是自定义类型
以上是关于操作符重载的主要内容,如果未能解决你的问题,请参考以下文章
Groovy集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )