操作符重载

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集合遍历 ( 操作符重载 | 集合中的 “ + “ 操作符重载 | 集合中的 “ - “ 操作符重载 | 代码示例 )

操作符重载浅析(六种情况)

操作符重载

想问大佬++操作符重载,前置和后置的问题?

Groovymap 集合 ( map 集合操作符重载 | - 操作符重载 | 代码示例 )

Groovymap 集合 ( map 集合操作符重载 | + 操作符重载 | 代码示例 )