第7章运算符重载和类型转换.pptVIP

  1. 1、本文档共34页,可阅读全部内容。
  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文档。上传文档
查看更多
第7章运算符重载和类型转换

运算符重载 主要内容 运算符重载的目的 运算符重载概述 重载的规则和限制 如何重载运算符 常见运算符的重载 类型转换 小结 运算符重载概述 运算符是一些系统预定义的函数名称,即用一些特定的符号表示各种运算。每个运算符对运算数据都有一定要求。 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作,这就提出了对运算符进行重新定义,赋予已有符号以新功能的要求。 运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为。 运算符重载的实质就是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用的函数,这个过程是在编译过程中完成的。 运算符重载的规则和限制 不可以重载的运算符有:. .* :: ?: sizeof 只能重载C++语言中已有的运算符,不可臆造新的。 运算符重载后优先级和结合性都不会改变, 不能改变操作数个数,单目只能重载为单目运算符,双目只能重载为双目运算符 不能改变运算符对预定义类型数据的操作方式,即重载运算符时,其操作数中至少应该有一个是自定义类型。 重载的运算符应保持其原有的基本语义。 C++ 规定:= - ( ) [ ] 只能重载为成员函数形式: 作为提取和插入运算符使用时,只能用友元函数重载 运算符函数 定义运算符重载函数的一般格式: type operator @(arg) { ...... //函数体 } type为函数返回值的类型;@为要重载的运算符;arg为函数的形参表, operator是关键字,它与其后的运算符一起构成函数名。 为了提高访问效率,运算符重载函数通常需要直接访问对象的私有或保护的数据成员,因此运算符重载函数通常为类的成员函数或者友元函数。 重载为类的成员函数 双目运算符 B 如果要重载 B 为类的成员函数,使之能够实现表达式 oprd1 B oprd2,其中 oprd1 为A 类对象,则 B 应被重载为 A 类的成员函数,形参类型应该是 oprd2 所属的类型。 经重载后, oprd1 B oprd2 相当于 oprd1.operator B(oprd2) 前置单目运算符 U 如果要重载 U 为类成员函数,使之能够实现表达式 U oprd,其中 oprd 为A类对象,则 U 应被重载为 A 类的成员函数,无形参。经重载后,表达式 U oprd 相当于 oprd.operator U() 后置运算符“++” 和“? ? ” 如果要实现表达式oprd++或oprd ? ? ,其中oprd为A 类对象,那么运算符重载函数中要带一个整型(int)形参。 经重载后, oprd++ 相当于 oprd.operator ++(0) oprd ? ? 相当于 oprd.operator ? ?(0) 前增量与后增量的区别 使用前增量时,对对象(操作数)进行增量修改,然后再返回该对象,参数与返回的是同一个对象 使用后增量时,必须在增量之前返回原有的对象。后增量操作返回的是原有对象值,不是原有对象,原有对象已经被增量修改。 重载为类的友元函数 此时运算所需的操作数都是通过函数的参数表来传递,在参数表中形参从左到右的顺序就是运算符操作数的顺序。 双目运算符 B重载后, (ch18_2) 表达式oprd1 B oprd2 等同于operator B(oprd1,oprd2 ) 前置单目运算符 B重载后, B oprd 等同于 operator B(oprd ) 后置单目运算符 ++和- -重载后,此时函数的形参有两个,一个是类的对象,另一个是整型(int)形参 oprd B 等同于 operator B(oprd,0 ) 两种重载形式的比较 对双目运算符而言,成员运算符函数带有一个参数,而友元运算符函数带有两个参数;对单目运算符而言,成员运算符函数不带参数,而友元运算符函数带有一个参数 。 双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但有一种情况必须使用友元函数,如加法运算。 运算符函数调用形式 成员与友元运算符函数选取经验 对于单目运算符,建议选择成员函数。 对于运算符“= ()[ ] - ”只能作为成员函数。 对于运算符“ += -= /= *= = != ~= %= = =”,建

文档评论(0)

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

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

1亿VIP精品文档

相关文档