C++ 运算符重载:自定义类型的运算扩展
学习目标:掌握运算符重载的核心语法与规则,能够为自定义类型重载常用运算符,实现类对象的灵活运算。 学习重点:运算符重载的基本形式、成员函数与全局函数重载的区别、常见运算符的重载实现、禁止重载的运算符。
一、运算符重载的概念与核心价值
核心结论:运算符重载是 C++ 静态多态的重要体现,允许为自定义类型(如类、结构体)重新定义运算符的行为,让自定义对象可以像内置类型一样使用运算符。
运算符重载的核心价值主要体现在三个方面:
- 简化代码书写:用直观的运算符替代繁琐的成员函数调用,提升代码可读性。
- 统一操作风格:让自定义类型的运算逻辑与内置类型保持一致,降低学习和使用成本。
- 扩展类型功能:根据业务需求定制运算符的行为,满足自定义类型的运算需求。
注意:运算符重载不会改变运算符的优先级和结合性,也不会改变运算符的操作数个数。
二、运算符重载的基本语法
运算符重载的本质是函数重载,分为成员函数重载和全局函数重载两种形式。
2.1 成员函数重载语法
将运算符重载函数定义为类的成员函数,语法格式如下:
class 类名 {
public:
返回值类型 operator 运算符 (参数列表) {
// 自定义运算逻辑
}
};
- 一元运算符(如
++、--)作为成员函数时,没有参数。 - 二元运算符(如
+、-)作为成员函数时,只有一个参数,表示运算符右侧的操作数。
2.2 全局函数重载语法
将运算符重载函数定义为全局函数,语法格式如下:
返回值类型 operator 运算符 (参数列表) {
// 自定义运算逻辑
}
- 一元运算符作为全局函数时,有一个参数。
- 二元运算符作为全局函数时,有两个参数,分别表示左右两侧的操作数。
- 如果需要访问类的私有成员,可将全局重载函数声明为类的友元函数。
三、常见运算符的重载实现
3.1 二元运算符重载:以 + 为例
以自定义 Point 类为例,重载 + 运算符实现两个点的坐标相加。


