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