重载运算符 (仅限 C + +)
您可以重新定义或重载 C++ 中大多数内置运算符的函数。这些运算符可以全局重载,也可以逐类重载。 重载运算符作为函数实现,可以是成员函数或全局函数。
重载运算符称为 运算符函数。 您使用关键字 operator 在运算符前面声明运算符函数。 重载运算符与重载函数不同,但与重载函数一样,它们通过与运算符一起使用的操作数的数量和类型来区分。
考虑标准 + (加号) 运算符。 当此运算符与不同标准类型的操作数配合使用时,运算符的含义略有不同。 例如,两个整数的加法与两个浮点数的加法不同。 C++ 允许您在将标准 C++ 运算符应用于类类型时为其定义自己的含义。
您可以使下列任何运算符超负荷:
| + | - | * | ⁄ | % | ^ | & | | | ~ |
| ! | = | < | > | += | -= | *= | ⁄= | %= |
| ^= | &= | |= | << | >> | <<= | >>= | == | != |
| <= | >= | && | || | ++ | -- | , | ->* | -> |
| ( ) | [ ] | 新建 | 删除 | 新建 [] | 删除 [] |
其中 () 是函数调用运算符, [] 是下标运算符。
您可以使以下运算符的一元格式和二元格式都超负荷:
不能使下列操作程序超负荷:
不能使预处理器符号
| + | - | * | & |
不能使下列操作程序超负荷:
| . | .* | :: | ?: |
不能使预处理器符号
# 和 ##超负荷。运算符函数可以是非静态成员函数,也可以是具有至少一个具有 class , reference to class , enumeration 或 reference to enumeration 类型的参数的非成员函数。
不能更改运算符的优先顺序,分组或操作数。
重载运算符 (函数调用运算符除外) 在自变量列表中不能具有缺省自变量或省略号。
必须将重载的 =, [], ()和 -> 运算符声明为非静态成员函数,以确保它们接收 lvalues 作为其第一个操作数。
运算符 new, delete, new[]和 delete[] 不遵循本节中描述的一般规则。
将继承除 = 运算符以外的所有运算符。