运算符重载
维基百科,自由的百科全书
在计算机程序设计中,运算符重载是多态的一种。这里,运算符(比如 +, = 或 ==)被当作多态函数,他们的行为随着其参数类型的不同而不同。运算符并不一定总是符号。
运算符重载通常只是一种语法糖衣。它可以简单地通过函数调用来模拟:
- a + b × c
在一个支持运算符重载的语言里,上面的写法要比下面的写法有效而简练:
- operator_add (a, operator_multiply (b,c))
(假设 × 运算符的优先级高于 +)
当一种语言允许运算符在某种情况下被隐式调用的时候,运算符重载将不只提供写法上的方便。例如,Ruby 中的 to_s
运算符就是如此,它返回一个对象的字符串表示。
[编辑] 批评
运算符重载由于使程序员能够根据运算子类型的不同来决定运算符功能的不同而受到批评。C++ 中 <<
的使用就是一个例子。表达式
a << 1
当 a 是整型变量时将返回 a 的两倍,但是当 a 是一个输出流时将向这个流中写入“1”。因为运算符重载允许程序员改变运算符通常的语义,慎重使用运算符重载通常被认为是一个好习惯。
[编辑] 分类
支持运算符重载和定义新运算符的语言:
支持运算符重载的语言:
不支持运算符重载的语言: