运算符重载是一种形式的C++多态,其隐藏了运算内部的机理,并强调了实质,这是OOP的一个目标。
重载的运算符是左结合的,左操作数为调用对象,一般格式如下:
<返回类型说明符> operator <运算符符号>(<参数表>)
{
<函数体>
}
运算符重载有以下限制:
1、重载后的运算符必须至少有一个操作数是用户定义的类型,这样就防止了重载标准类型。
如:不能将< - >重载为两个Int的差。
2、使用运算符时不能改变原来的句法规则。如:
int x;
%x; // 不能将%重载为使用一个操作数
3、不能改变修改运算符的优先级。
4、不能创建新的运算符,
如:不能定义**为求幂
5、不能重载以下运算符:
~<sizeof>:sizeof运算符
~<.>:成员运算符
~<::>:作用域解析运算符
~<?:>:条件运算符
~<typeid>:一个RTTI运算符
~<const_cast>:强制类型转换运算符
~<dynamic_cast>:强制类型转换运算符
~<static_cast>:强制类型转换运算符
~<reinterpret_cast>:强制类型转换运算符
6、大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数重载。
~<=>:赋值运算符
~<()>:函数调用运算符
~<[]>:下标运算符
~<->>:通过指针访问类成员的运算符