运算符(operator)重载.pptVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
运算符(operator)重载

第12章 运算符(operator)重载 什么是运算符重载 运算符重载的基本方法 运算符重载的一般规则 用成员函数重载运算符 用友元函数重载运算符 算术运算符、关系运算符的重载 1. 什么是运算符重载 (1)问题的提出:在前面的章节中,我们学习了基本数据类型和运算符的有关内容,知道3+19、84.7-23.8等式子是成立的。 假设已定义了日期类Date,复数类Complex 现在定义几个对象: Date d1(2008,10,1),d2(2010,11,12); Complex c1(3,4), c2(4,-5); 问题: (1)能否用 d2-d1 求出2008年国庆距离2010年广州亚运会(第16届)开幕的天数? (2)能否用 c1+c2 求出两个复数之和? 回答是否定的! 事实上,C++预定义的+、-、*、/、>、>=、<、<=、==、!=等一系列运算符的操作对象只能是基本数据类型,要让它们在用户自定义的数据类型(如:类)中也能类似使用,就需要对运算符赋予多种含义,这就是运算符重载。 (2)运算符重载的概念:对C++中的已有运算符赋予更多的含义,使之作用于特定类的对象,实现特定的功能,而且使用形式与基本数据类型的形式相同。 要理解运算符重载的含义,需要把握其中的 “变”与“不变”: 运算符不变,重载只能考虑C++现有的运算符,不允许用户定义新的运算符; 操作数的范围有了变化,不再局限于基本数据类型,可以扩展到用户自定义的类型(即用户定义的类),所实现的功能也可以由用户来定义; 运算符的使用形式不变,这样用户就能充分利用已有的知识、经验,见“符”猜义,节省了学习时间,提高了工作效率。 对此,我们形象地称之为“旧瓶装新酒”。 2. 运算符重载的基本方法 我们知道,9/2=4,9.0/2.0=4.5,为什么整数除法与浮点数除法的结果不一样呢? 其实,在C++内部,任何运算都是通过函数来实现的。这些函数的形式为: operator 运算符([形式参数表]) 称之为运算符函数 之所以称为函数,是因为它们完全具备了函数的特征,函数名、圆括号、参数表、返回类型等函数的要素它一个不少,特殊之处是函数名是由关键字operator 和 运算符组合而成。 (1) 运算符函数 计算表达式 9/2、9.0/2.0 分别被解释为调用函数:operator /(9,2)、 operator /(9.0,2.0)。 而 operator/(int ,int)和 operator /(double ,double) 两个函数是重载关系:函数名相同,参数类型不同,功能也不同,故两个表达式的计算结果不同。 事实上,C++中的每一个运算符都对应着一个或多个运算符函数,具体调用时,系统会根据实参的不同选择相应函数进行匹配。 如果用户想让某一个运算符也能在自己定义的类对象中使用,并实现一定的功能,且不影响该运算符原先的使用,就必须对它的运算符函数进行重载。 (2) 运算符函数重载的基本形式 运算符函数作为函数的一种,其声明、定义格式与普通函数差不多,只是函数的调用形式有点特别。 函数声明:函数类型 operator 运算符([形参表]) 函数定义:函数类型 operator 运算符([形参表]) { …… //对运算符的重载处理 } 函数调用:[操作数1] 运算符 [操作数2] 说明:加方括号的项表示可能省略,但至少有一个操作数。 当然,运算符函数重载的具体格式还与所选用的函数形式(是成员函数还是友元函数)及操作数的个数(单目或双目)密切相关,后面详细介绍。 3. 运算符重载的一般规则 C++不允许用户自己定义新的运算符,只能对已有的运算符进行重载; C++允许重载的运算符:(绝大多数运算符) 双目算术运算符:+、-、*、/、%(取模) 关系运算符: !=、== 、>、>=、<、<= 逻辑运算符:&&、||、! 单目运算符:+(正)、-(负)、*(指针)、&(取地址) 自增自减运算符:++、--(又分为前缀、后缀) 位运算符:|、&、~、^、<<(左移)、>>(右移) C++允许重载的运算符:(续) 赋值运算符:=、+=、-=、*=、/=、%=、|=、&=、^=、<<=、>>= 空间申请与释放运算符:new、delete、new[]、delete[] 其它运算符:( )(函数调用)、->(成员访问)、->*(成员指针访问)、,(逗号)、[ ](下标) 不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) sizeof(长度运算符) ? :(条件运算符) 重载不能改变运算符操作数的个数、优先级和结合性

文档评论(0)

woai118doc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档