重载运算符:使得用户自定义的数据以一种更简洁的方式工作
限制:
不能重载的算符:. :: .* ?: sizeof
可以重载的运算符 :+ - * / % ^ & | ~
! = < > += -= *= /= %
^= &= |= << >> >>= <<= == !=
<= >= && || ++ -- ->* ‘ ->
[] () new delete new[] delete[]
重载运算符函数可以对运算符作出新的解释,但原有基本语义不变:
I.不改变运算符的优先级
II.不改变运算符的结合性
III.不改变运算符所需要的操作数
IV.不能创建新的运算符
II.不改变运算符的结合性
III.不改变运算符所需要的操作数
IV.不能创建新的运算符
一元运算符:Object op 或 op Object
二元运算符:ObjectL op ObjectR
重载为成员函数:
一元:Object . operator op () 操作数由对象Object通过this指针隐含传递
二元:ObjectL . operator op ( ObjectR ) 左操作数由ObjectL通过this指针传递,右操作数由参
成员运算符函数的原型在类的内部声明格式如下:
class X
{
//…
返回类型 operator运算符(形参表);
//…
}
在类外定义成员运算符函数的格式如下:
返回类型 X::operator运算符(形参表)
{
函数体
}
重载为友元函数:
一元:operator op (Object) 操作数由参数表的参数Object提供
二元:operator op ( ObjectL, ObjectR ) 左右操作数都由参数传递
双目运算符重载为成员函数:对双目运算符而言,成员运算符函数的形参表中仅有一个参数,它作为运算符的右操作数,此时当前对象作为运算符的左操作数,它是通过this指针隐含地传递给函数的。
例:复数加法
#inc