运算符重载(二)

3.重载运算符的规则:
1)不允许用户自己定义新的运算符,只能对已有的运算符进行重载

2)允许重载大部分运算符只有5个不能重载:
.成员访问运算符
.*成员指针访问运算符
::域运算符
sizeof长度运算符
?:条件运算符

前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。

3)重载不能改变运算符运算对象的个数。

4)重载不能改变运算符的优先级。

5)重载不能改变运算符的结合性。如=是右结合性(自右至左),重载后仍为右结合性。

6)重载运算符的函数不能有默认的参数。否则就改变了运算符参数的个数。

7)重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应该有一个是类对象(或类对象的引用)。也就是说参数不能全部是c++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。

8)用于类对象的运算符一般必须重载,但有两个例外:+和&不必用户重载。
系统已经为每一个新声明的类重载了一个赋值运算符,它的作用是逐个复制类的数据成员。但有时候系统提供的默认的对象赋值运算符不能满足程序的要求,例如数据成员中包含指向动态分配内存的指针成员时,在复制次成员时就可能出现危险。在这种情况下,就需要自己重载赋值运算符。
&地址运算符也不必重载,它能返回类对象在内存中的起始地址。

9)应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能。
10)运算符重载可以是类的成员函数,也可以是类的友元函数,还可以是普通函数。

猜你喜欢

转载自blog.csdn.net/weixin_39664459/article/details/80354390
今日推荐