# 运算符重载
```C++
Time Time::operator+(const Time & t) const{
Time sum;
sum.minutes = minites + t.minutes;
sum.hours = hours + t.hours + sum.minutes/60;
sum.minutes %= 60;
}
```
## 运算符重载的限制
1. 重载后的运算符必须至少有一个操作数是用户定义的类型,这可以防止用户为标准类型重载运算符。因此,不能将减法运算符(-)重载为计算两个double类型值的结果,确保程序正常运行。
2. 使用运算符时不能违反运算符原来的句法规则,该有几个操作数就要提供几个操作数。例如,不能将求模运算符(%)重载成为使用一个操作数的规则。同样不能修改运算符的优先级,重载的运算符与原运算符具有相同的优先级。
3. 不能创建新的运算符。例如,不能定义`operator**()` 函数来表示求幂。
4. 不能重载下面的运算符。
- `sizeof` :sizeof运算符。
- `.` :成员运算符。
- `.*` :成员指针运算符。
- `::` :作用域解析运算符。
- `? : ` 条件运算符。
- `typeid` :一个RTTI运算符
- `const_cast` :强制类型转换运算符。
- `dynamic_cast` :强制类型转换运算符。
- `reinterpret_cast` :强制类型转换运算符。
- `static_cast` :强制类型转换运算符。
5. 可重载运算符表中大多数运算符都可以通过成员函数或者非成员函数进行重载,但个别运算符只能通过成员函数进行重载。
- `=` :赋值运算符。
- `()` :函数调用运算符。
- `[]` :下标运算符。
- `->` :通过指针访问类成员的运算符。
| 可 | 重 | 载 | 运 | 算 | 符 |
| ---- | ---- | ---- | ------ | ----- | -------- |
| + | - | * | / | % | ^ |
| & | \| | ~= | ! | = | < |
| ^= | &= | \|= | << | >> | >>= |
| <<= | == | != | <= | >= | && |
| \|\| | ++ | -- | , | ->* | -> |
| () | [] | new | delete | new[] | delete[] |