运算符重载需要注意的事项:

特殊情况:

  1. = () [ ]  -> 不能重载为类的友元函数!!!(否则可能和C++的其他规则矛盾),只能使用成员函数形式进行重载。

     2. 如果运算符的第一个操作数要求使用隐式类型转换,则必须为友元函数(成员函数方式的第一个参数是this指针)

注意:

同一个运算符重载, 不能同时使用两种方式来重载,会导致编译器不知道选择哪一个(二义性)

运算符重载的禁区和规则

1. 为了防止对标准类型进行运算符重载,
C++规定重载运算符的操作对象至少有一个不是标准类型,而是用户自定义的类型

   比如不能重载 1+2

   但是可以重载  cow + 2 和 2 + cow   // cow是自定义的对象

2.不能改变原运算符的语法规则, 比如不能把双目运算符重载为单目运算

  1. 不能改变原运算符的优先级

  1. 不能创建新的运算符,比如 operator**就是非法的, operator*是可以的

  1. 不能对以下这四种运算符,使用友元函数进行重载

   = 赋值运算符,()函数调用运算符,[ ]下标运算符,->通过指针访问类成员

6. 不能对禁止重载的运算符进行重载

不能被重载的运算符

成员访问

.

域运算

::

内存长度运算

sizeof

三目运算

 ? : :

预处理

#


可以被重载的运算符

双目运算符

+    -    *    /    %

关系运算符

==  !=   <   <=   >   >=

逻辑运算符

&&  ||    !

单目运算符

+(正号)   -(负号)  *(指针)  &(取地址)  ++   --

位运算

&    |   ~    ^    <<(左移)    >>(右移)

赋值运算符

=   +=   -=    *=   /=   %=  &=  |=  ^=  <<=   >>=

内存分配

new   delete  new[ ]   delete[ ]

其他

( )  函数调用

-> 成员访问
[ ]   下标

,  逗号

你可能感兴趣的:(c++,开发语言)