运算符重载的禁区和规则
-
为了防止对标准类型进行运算符重载,
C++规定重载运算符的操作对象至少有一个不是标准类型,而是用户自定义的类型
比如不能重载 1+2
但是可以重载 cow + 2 和 2 + cow // cow是自定义的对象 -
不能改变原运算符的语法规则, 比如不能把双目运算符重载为单目运算
-
不能改变原运算符的优先级
-
不能创建新的运算符,比如 operator**就是非法的, operator*是可以的
-
不能对以下这四种运算符,使用友元函数进行重载
= 赋值运算符,()函数调用运算符,[ ]下标运算符,->通过指针访问类成员 -
不能对禁止重载的运算符进行重载
不能被重载的运算符
| 名称 | 操作符 |
|---|---|
| 成员访问 | . |
| 域运算 | :: |
| 内存长度运算 | sizeof |
| 三目运算 | ? : : |
| 预处理 | # |
| 成员访问 | . |
可以被重载的运算符
| 名称 | 操作符 |
|---|---|
| 双目运算符 | + - * / % |
| 关系运算符 | == != < <= > >= |
| 逻辑运算符 | && 丨丨 ! |
| 单目运算符 | +(正号) -(负号) *(指针) &(取地址) ++ --: |
| 位运算 | & |
| 赋值运算符 | = += -= *= /= %= &= |
| 内存分配 | new delete new[ ] delete[ ] |
| 函数调用 | ( ) |
| 成员访问 | -> |
| 下标 | [ ] |
| 逗号 | , |
本文详细介绍了C++中运算符重载的规则,包括必须有一个自定义类型的操作对象、保持运算符原有语法规则和优先级、禁止对某些特定运算符使用友元函数重载等。同时,列举了可重载和不可重载的运算符列表,帮助开发者理解并正确使用运算符重载。
1225

被折叠的 条评论
为什么被折叠?



