C++知识要点整理09:运算符重载

来源:互联网 发布:mac音量嘟嘟 编辑:程序博客网 时间:2024/06/06 00:37

1.运算符重载

一般格式为:
函数类型 operator 运算符名称(形参表)
{ 对运算符的重载处理 }

运算符被重载后,其原有的功能仍然保留,没有丧失或改变。那么,同一个运算符可以代表不同的功能,编译系统是怎样判别该执行哪一个功能呢?是根据表达式的上下文决定的,即根据运算符两侧(如果是单目运算符则为一侧)的数据类型决定的。

2.重载运算符的规则

(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
(2)C++中绝大部分的运算符允许重载不能重载的只有5个:.(成员访问运算符);*(成员指针访问运算符);::(域运算符);sizeof(长度运算符);?:(条件运算符)
(3)重载不能改变运算符运算对象(即操作数)的个数。
(4)重载不能改变运算符的优先级别。
(5)重载不能改变运算符的结合性。如赋值运算符“=”是右结合性(自右至左),重载后仍为右结合性。
(6)重载运算符的函数不能有默认的参数。
(7)重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。
(8)用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。
(9)从理论上说,可以将一个运算符重载为执行任意的操作。但一般应当使重载运算符的功能类似于该运算符作用于标准类型数据时所实现的功能。

3.运算符重载函数作为类成员函数和友元函数

对运算符重载的函数有两种处理方式:
(1)把运算符重载的函数作为类的成员函数;
(2)运算符重载的函数不是类的成员函数(可以是一个普通函数),在类中把它声明为友元函数。
如果将运算符重载函数作为成员函数,它可以通过this指针自由地访问本类的数据成员,因此可以少写一个函数的参数。
将双目运算符重载作为友元函数时,由于友元函数不是该类的成员函数,因此在函数的形参参数列中必须有两个参数,不能省略。

4.重载的注意事项:

(1)在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符参数。
(2)只能将重载“>>”和“<<”的函数作为友元函数,而不能将它们定义为成员函数。
原创粉丝点击