c++运算符重载

c++运算符重载概念和原理

c++的运算符加减乘除只能对于基本数据类型变量或常量进行运算,当我们想要进行对象之间的运算时略显繁琐,希望对象之间也可以直接使用运算符进行运算

利用 C++ 提供的“运算符重载”机制,赋予运算符新的功能,就能解决用+将两个对象相加这样的问题。

运算符重载,就是对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时产生不同的行为。运算符重载的目的是使得 C++ 中的运算符也能够用来操作对象。

1
2
3
返回值类型 operator 运算符(形参表) {
...
}

包含被重载的运算符的表达式会被编译成对运算符函数的调用,运算符的操作数成为函数调用时的实参,运算的结果就是函数的返回值。运算符可以被多次重载。

运算符可以重载为全局函数,也可以被重载为成员函数,应用于类或结构体。

比如我们在写计算几何时可以定义point结构体用于表示点坐标重写运算符加减点坐标得到二维平面上的向量来计算会更加简便

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct point{
int x;
int y;
point(int x = 0, int y = 0) :x(x), y(y) {};
point operator -(const point& p) {
x -= p.x; y -= p.y;
return *this;
}
};
int main() {

point p1(0, 0), p2(1, 2);
p1 = p1 - p2;
cout << p1.x<<" " << p1.y;
return 0;
}

结果是

-1 -2

运算符重载为全局函数时,参数的个数等于运算符的目数(即操作数的个数);运算符重载为成员函数时,参数的个数等于运算符的目数减一。

运算符重载为友元函数

一般情况下,将运算符重载为成员函数是较好的选择。但有时,重载为成员函数不能满足使用要求,重载为全局函数又不能访问类的私有成员,因此需要将运算符重载为友元。

在重载运算符的基础之上 在前面加上关键词friend 即可。重载的运算符可以访问到结构体内变量


c++运算符重载
http://example.com/2024/06/07/运算符重载/
作者
wangzj
发布于
2024年6月7日
许可协议