运算符(operator)重载

运算符(operator)重载

ID:39724326

大小:422.50 KB

页数:19页

时间:2019-07-10

运算符(operator)重载_第1页
运算符(operator)重载_第2页
运算符(operator)重载_第3页
运算符(operator)重载_第4页
运算符(operator)重载_第5页
资源描述:

《运算符(operator)重载》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章运算符(operator)重载什么是运算符重载运算符重载的基本方法运算符重载的一般规则用成员函数重载运算符用友元函数重载运算符算术运算符、关系运算符的重载1.什么是运算符重载(1)问题的提出:在前面的章节中,我们学习了基本数据类型和运算符的有关内容,知道3+19、84.7-23.8等式子是成立的。假设已定义了日期类Date,复数类Complex现在定义几个对象:Dated1(2008,10,1),d2(2010,11,12);Complexc1(3,4),c2(4,-5);问题:(1)能否用d2-d1求出2008年国庆距离2010年广州亚运会(第16届)开幕的天数?(2)能否用

2、c1+c2求出两个复数之和?回答是否定的!事实上,C++预定义的+、-、*、/、>、>=、<、<=、==、!=等一系列运算符的操作对象只能是基本数据类型,要让它们在用户自定义的数据类型(如:类)中也能类似使用,就需要对运算符赋予多种含义,这就是运算符重载。(2)运算符重载的概念:对C++中的已有运算符赋予更多的含义,使之作用于特定类的对象,实现特定的功能,而且使用形式与基本数据类型的形式相同。要理解运算符重载的含义,需要把握其中的“变”与“不变”:运算符不变,重载只能考虑C++现有的运算符,不允许用户定义新的运算符;操作数的范围有了变化,不再局限于基本数据类型,可以扩展到用户自定义的类

3、型(即用户定义的类),所实现的功能也可以由用户来定义;运算符的使用形式不变,这样用户就能充分利用已有的知识、经验,见“符”猜义,节省了学习时间,提高了工作效率。对此,我们形象地称之为“旧瓶装新酒”。2.运算符重载的基本方法我们知道,9/2=4,9.0/2.0=4.5,为什么整数除法与浮点数除法的结果不一样呢?其实,在C++内部,任何运算都是通过函数来实现的。这些函数的形式为:operator运算符([形式参数表])称之为运算符函数之所以称为函数,是因为它们完全具备了函数的特征,函数名、圆括号、参数表、返回类型等函数的要素它一个不少,特殊之处是函数名是由关键字operator和运算符组合

4、而成。(1)运算符函数计算表达式9/2、9.0/2.0分别被解释为调用函数:operator/(9,2)、operator/(9.0,2.0)。而operator/(int,int)和operator/(double,double)两个函数是重载关系:函数名相同,参数类型不同,功能也不同,故两个表达式的计算结果不同。事实上,C++中的每一个运算符都对应着一个或多个运算符函数,具体调用时,系统会根据实参的不同选择相应函数进行匹配。如果用户想让某一个运算符也能在自己定义的类对象中使用,并实现一定的功能,且不影响该运算符原先的使用,就必须对它的运算符函数进行重载。(2)运算符函数重载的基本形

5、式运算符函数作为函数的一种,其声明、定义格式与普通函数差不多,只是函数的调用形式有点特别。函数声明:函数类型operator运算符([形参表])函数定义:函数类型operator运算符([形参表]){……//对运算符的重载处理}函数调用:[操作数1]运算符[操作数2]说明:加方括号的项表示可能省略,但至少有一个操作数。当然,运算符函数重载的具体格式还与所选用的函数形式(是成员函数还是友元函数)及操作数的个数(单目或双目)密切相关,后面详细介绍。3.运算符重载的一般规则C++不允许用户自己定义新的运算符,只能对已有的运算符进行重载;C++允许重载的运算符:(绝大多数运算符)双目算术运算符

6、:+、-、*、/、%(取模)关系运算符:!=、==、>、>=、<、<=逻辑运算符:&&、

7、

8、、!单目运算符:+(正)、-(负)、*(指针)、&(取地址)自增自减运算符:++、--(又分为前缀、后缀)位运算符:

9、、&、~、^、<<(左移)、>>(右移)C++允许重载的运算符:(续)赋值运算符:=、+=、-=、*=、/=、%=、

10、=、&=、^=、<<=、>>=空间申请与释放运算符:new、delete、new[]、delete[]其它运算符:()(函数调用)、->(成员访问)、->*(成员指针访问)、,(逗号)、[](下标)不能重载的运算符只有5个:.(成员访问运算符).*(成员指针访问运

11、算符)::(域运算符)sizeof(长度运算符)?:(条件运算符)重载不能改变运算符操作数的个数、优先级和结合性;重载运算符的函数不能有默认的参数;重载运算符必须和用户自定义类型的对象一起使用,其参数至少有一个是类对象或对象引用;应当使重载运算符的功能类似于该运算符作用于标准数据类型时所实现的功能;对于运算符:=(对象赋值)和&(取对象地址)的功能,系统已有默认定义,通常情况用户不需要重新定义。只有当对象间赋值涉及动态分配的指针,有可能出现多个

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。