C++ 运算符重载实战指南:语法、方法、限制与代码示例
什么是运算符重载?
利用 C++ 运算符重载,可在同一作用域内赋予运算符多重含义。目标是为用户自定义类型赋予运算符的自定义行为。
通过运算符重载,可重新定义大多数 C++ 运算符,用单一符号执行不同操作。
本教程你将学到:
- 运算符重载的概念
- 语法
- C++ 重载运算符的不同方法
- 不可重载的运算符
- 关键注意事项
- 运算符重载规则
- 如何实战重载运算符
语法
重载 C++ 运算符,需在类内定义特殊成员函数:
class class_name { ... public: return_type operator symbol (argument(s)) { ... } ... };
组成部分:
- return_type – 运算符函数的返回类型。
- operator – 开始声明的关键字。
- symbol – 要重载的运算符,如
+、-、<、++。 - argument(s) – 参数,同普通函数。
示例 1:重载前缀 -- 运算符
#include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; }
输出:

代码截图:

代码解释:
- 包含
<iostream>访问 I/O 设施。 - 使用
std命名空间简化代码。 - 定义类
TestClass。 count为私有数据成员。- 提供公有构造函数将
count初始化为 5。 - 重载前缀
--运算符,使count减 3。 - 实现
Display()打印当前值。 main()中创建实例、应用重载运算符、显示结果。
C++ 运算符重载的不同方法
重载可通过以下方式实现:
- 成员函数
- 非成员函数(友元或自由函数)
- 友元函数(需访问私有数据时)
- 左操作数为类对象时,通常用成员函数。
- 左操作数为其他类型时,需非成员函数。
- 运算符需访问私有/受保护成员时,友元函数适用。
所有 C++ 运算符都能重载吗?
不能。以下运算符不可重载:
::– 作用域解析?:– 三元条件.– 成员访问sizeof– 大小查询*(成员指针选择器)
注意事项
- 重载仅影响用户自定义类型;内置类型保持原有行为。
- 赋值(
=)和取地址(&)运算符为提供拷贝构造或赋值运算符的类自动重载。 - 运算符优先级不变;可用括号强制求值顺序。
::、.、?:显式禁止重载。
运算符重载规则
- 至少一个操作数必须是用户自定义类类型。
- 只能重载现有运算符;不能引入新运算符符号。
- 某些运算符(如
new、delete)不能作为友元函数重载,但可作为成员函数重载。
如何重载运算符
示例 1:重载前缀 ++ 运算符
#include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x += 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; }
输出:

代码截图:

示例 2:复数加法运算符重载
#include <iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) : real(rl), over(ov) {} TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); }
输出:

代码截图:

代码解释:
- 包含
<iostream>并使用std命名空间。 - 定义
TestClass包含real和over分量。 - 提供构造函数初始化。
- 重载
+运算符实现复数加法。 - 返回包含和的新
TestClass实例。 - 实现
print()显示复数。 main()中创建两实例、相加、打印结果。
总结
- 运算符重载允许同一作用域内运算符具有多重含义。
- 为用户自定义类型提供自定义行为。
- 大多数 C++ 运算符可重载,但少数不可。
- 至少一个操作数必须是用户自定义类型。
- 只能重载现有运算符。
C语言
- C++数组传递给函数实战指南
- C++ 运算符全解析:类型、示例与示例程序
- C++ do-while 循环详解:语法、实战示例与嵌套循环
- C++ 指针精通:核心概念、代码示例与实战应用
- C++ char 类型完全指南:声明、ASCII 码、输入输出与字符串转换
- C++ 结构体详解:定义、初始化、指针、函数参数与局限性
- 掌握 C++ std::list:语法、函数与实战示例
- C++ 函数详解:从声明到调用的实战指南
- 精通 Python 运算符重载:实战指南
- 精通 Python Lambda 函数:实用示例与最佳实践
- Python round() 函数详解与实战示例
- 精通 Python map() 函数:语法、示例与最佳实践