运算符重载
operator 关键字声明函数指定 operator-symbol 意味着,在对类的实例。 这种运算符多个表示或 “重载”它。 编译器区分运算符之间的差异含义通过检查其操作数的类型。
type operator operator-symbol ( parameter-list )
备注
可以全局重新定义大多数内置运算符的功能或基于一个类由类的基础。 重载运算符实现为功能。
重载运算符的名称为 operatorx, x 是运算符,这是因为在下表中显示。 例如,重载加号,在页 operator+的函数。 同样,重载 " 添加/赋值运算符, +=,它定义名为 operator+=的函数。
Redefinable 运算符
运算符 |
名称 |
类型 |
---|---|---|
, |
逗号 |
Binary |
! |
逻辑“非” |
一元 |
!= |
不相等 |
Binary |
% |
模数 |
Binary |
%= |
取模赋值 |
Binary |
& |
按位“与” |
Binary |
& |
地址 |
一元 |
&& |
逻辑“与” |
Binary |
&= |
按位、赋值 |
Binary |
( ) |
函数调用 |
— |
( ) |
转换运算符 |
一元 |
* |
乘法 |
Binary |
* |
指针取消引用 |
一元 |
*= |
乘法赋值 |
Binary |
+ |
添加 |
Binary |
+ |
一元加号 |
一元 |
++ |
增量 1 |
一元 |
+= |
加法赋值 |
Binary |
– |
减法 |
Binary |
– |
一元求反 |
一元 |
–– |
减量 1 |
一元 |
–= |
减法赋值 |
Binary |
–> |
成员选择 |
Binary |
–>* |
指向成员的指针选择 |
Binary |
/ |
除法 |
Binary |
/= |
除法赋值 |
Binary |
< |
小于 |
Binary |
<< |
左移 |
Binary |
<<= |
左移赋值 |
Binary |
<= |
小于或等于 |
Binary |
= |
赋值 |
Binary |
== |
相等 |
Binary |
> |
大于 |
Binary |
>= |
大于或等于 |
Binary |
>> |
右移 |
Binary |
>>= |
右移赋值 |
Binary |
[ ] |
数组下标 |
— |
^ |
排除或 |
Binary |
^= |
排除或分配 |
Binary |
| |
按位“与或” |
Binary |
|= |
包含按位或分配 |
Binary |
|| |
逻辑“或” |
Binary |
~ |
1 的补码 |
一元 |
delete |
Delete |
— |
new |
New |
— |
conversion operators |
转换运算符 |
一元 |
1 " 的增量和减量运算符的存在两个版本:preincrement 和 postincrement。
请参见 运算符重载的一般规则 有关更多信息。 在重载运算符各类的约束在以下主题中进行了介绍:
无法重载下表中显示的运算符。 表包含预处理器符号 # 和 ##。
Nonredefinable 运算符
Operator |
Name |
. |
成员选择 |
.* |
指向成员的指针选择 |
:: |
范围解析 |
? : |
条件运算 |
# |
字符串的预处理器转换 |
## |
预处理器连接 |
虽然重载运算符由编译器隐式通常称为,并在代码时遇到,它们可以显式调用与任何成员或非成员函数调用的方法:
Point pt;
pt.operator+( 3 ); // Call addition operator to add 3 to pt.
示例
下面的示例 + 重载运算符添加两个复数并返回结果。
// operator_overloading.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
struct Complex {
Complex( double r, double i ) : re(r), im(i) {}
Complex operator+( Complex &other );
void Display( ) { cout << re << ", " << im << endl; }
private:
double re, im;
};
// Operator overloaded using a member function
Complex Complex::operator+( Complex &other ) {
return Complex( re + other.re, im + other.im );
}
int main() {
Complex a = Complex( 1.2, 3.4 );
Complex b = Complex( 5.6, 7.8 );
Complex c = Complex( 0.0, 0.0 );
c = a + b;
c.Display();
}
Output
6.8, 11.2