在C++中为了方便,提供运算符重载的功能,简单来说就是自定义运算符的功能。
重载运算符是具有特殊名称的函数:保留字后节需要定义的操作符号,像任意其他函数一样,重载操作符具有返回类型和形参表。
<返回类型说明符> operator <运算符号> (<参数表>){
<函数体>
}
双目运算符 | +(加法)、-(减法)、*(乘法)、/(除法)、%(取模) |
关系运算符 | ==(等于)、!=(不等于)、<(小于)、> (大于)、<=(小于等于)、 >=(大于等于) |
逻辑运算符 | ||(逻辑或)、&&(逻辑与)、!(逻辑非) |
单目运算符 | +(正)、-(负)、*(指针)、&(取地址) |
自增自减运算符 | ++(自增)、--(自减) |
位运算符 | |(按位或)、&(按位与)、~(按位取反)、^(按位异或)、<<(左移)、>>(右移) |
赋值运算 | =、+=、*=、/= 、%=、&=、|=、^=、<<=、>>= |
空间申请与释放 | new、delete、new[]、delete[] |
其他运算符 | ()(函数调用)、->(成员访问)、, (逗号)、[](小标) |
小面是不可重载的运算符列表:
. | 成员访问运算符 |
---|---|
.*、->* | 成员指针访问运算符 |
:: | 域运算符 |
sizeof | 长度运算符 |
?: | 条件运算符 |
# | 预处理符号 |
注:
1. 重载运算附实质上是函数的重载,因此编译程序对运算符重载的选择,遵循函数重载的原则。
2. 重载之后的运算符补鞥改变运算符的结合性与优先级,也不能改变运算符的操作个数和语法结构。
3. 运算符重载不能改变该运算符用于内部类型对象的含义。他只能和用户自定义的对象一起使用,或者用于用户自定义类型的对象和内部类型的对象一起使用。
4. 运算符重载是针对新类型数据的数据类型的实际需要对原有运算符进行适当的改造,重载的功能应与原有功能相似,避免没有目的的使用重载运算符。
运算符重载一般分为两种形式:
重载为类的成员函数、重载为类的非成员函数。
运算符重载为类的成员函数的一般格式为:
<函数类型> operator <运算符>(<参数表>)
{
<函数体>
}
<对象名>.operator <运算符>(<参数>)
它等价于
<对象名><运算符><参数>
例如:a+b等价于a.operator +(b)。一般情况下,我们采用运算符的习惯表达方式。
运算符重载为类的友元函数的一般格式为:
friend <函数类型> operator <运算符>(<参数表>)
{
<函数体>
}
调用友元函数运算符的格式如下:
operator <运算符>(<参数1>,<参数2>)
它等价于
<参数1><运算符><参数2>
例如:a+b等价于operator +(a,b)。