C++ 运算符重载:让自定义类型支持运算扩展
在 C++ 中,运算符重载是静态多态的重要体现。它允许我们为自定义类型(如类、结构体)重新定义运算符的行为,让自定义对象可以像内置类型一样使用 +、- 等符号。这不仅能简化代码书写,还能统一操作风格,降低学习和使用成本。
需要注意的是,运算符重载不会改变运算符的优先级和结合性,也不会改变运算符的操作数个数。
运算符重载的基本语法
运算符重载的本质是函数重载,分为成员函数重载和全局函数重载两种形式。
成员函数重载
将运算符重载函数定义为类的成员函数。对于一元运算符(如 ++、--),作为成员函数时没有参数;对于二元运算符(如 +、-),只有一个参数,表示运算符右侧的操作数。
class ClassName {
public:
// 返回值类型 operator 运算符 (参数列表) {
// 自定义运算逻辑
//}
};
全局函数重载
将运算符重载函数定义为全局函数。如果需要访问类的私有成员,可将全局重载函数声明为类的友元函数。
- 一元运算符作为全局函数时,有一个参数。
- 二元运算符作为全局函数时,有两个参数,分别表示左右两侧的操作数。
返回值类型 operator 运算符 (参数列表) {
// 自定义运算逻辑
}
常见运算符的重载实现
二元运算符重载:以 + 为例
我们以自定义 Point 类为例,重载 + 运算符实现两个点的坐标相加。
成员函数方式
这种方式下,左操作数是调用该函数的对象本身。
#include <iostream>
using namespace std;
class Point {
public:
int x, y;
// 构造函数
Point(int x = 0, y = ) : (x), (y) {}
Point +( Point& p) {
(->x + p.x, ->y + p.y);
}
{
cout << << x << << y << << endl;
}
};
{
;
Point p3 = p1 + p2;
p();
;
}


