运算符重载--(精选)公开课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++程序设计 西南林业大学计科系 邢丽伟4. 运算符重载 4.1 什么是运算符重载 4.2 运算符重载的方法 4.3 重载运算符的规则 4.4 运算符重载函数作为类成员函数和友元函数 4.5 重载双目运算符 4.6 重载单目运算符 4. 运算符重载 4.1 什么是运算符重载 所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。同样,运算符也可以重载。 现在要讨论的问题是: 用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用。 譬如,能否用“+”号进行两个复数的相加。在C++中不能在程序中直接用运算符“+”对复数进行相加运算。用户必须自己设法实现复数相加。例如用户可以通过定义一个专门的函数来实现复数相加。见例4.1。 结果是正确的,但调用方式不直观、不方便。能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢?如c3=c1+c2; 这就需要对运算符“+”进行重载。 4. 运算符重载 4.2 运算符重载的方法 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。 重载运算符的函数一般格式如下: 函数类型 operator 运算符名称 (形参列表) { 对运算符的重载处理 } 例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的: Complex operator+ (Complex c1,Complex c2); 4. 运算符重载 例4.2 4. 运算符重载 比较例4.1和例4.2,只有两处不同: (1) 在例4.2中以operator+函数取代了例4.1中的complex_add函数,而且只是函数名不同,函数体和函数返回值的类型都是相同的。 (2) 在main函数中,以“c3=c1+c2;”取代了例4.1中的“c3=plex_add(c2);”。在将运算符+重载为类的成员函数后,C++编译系统将程序中的表达式c1+c2解释为 c1.operator+(c2) //其中c1和c2是Complex类的对象 即以c2为实参调用c1的运算符重载函数operator+(Complex c2),进行求值,得到两个复数之和。 4. 运算符重载 虽然重载运算符所实现的功能完全可以用函数实现,但是使用运算符重载能使用户程序易于编写、阅读和维护。在实际工作中,类的声明和类的使用往往是分离的。假如在声明Complex类时,对运算符+,-,*,/都进行了重载,那么使用这个类的用户在编程时可以完全不考虑函数是怎么实现的,放心大胆地直接使用+,-,*,/进行复数的运算即可,十分方便。 对上面的运算符重载函数operator+还可以改写得更简练一些: Complex Complex∷operator + (Complex c2) {return Complex(real+c2.real, imag+c2.imag);} 需要说明的是: 运算符被重载后,其原有的功能仍然保留,没有丧失或改变。 通过运算符重载,扩大了C++已有运算符的作用范围,使之能用于类对象。 运算符重载对C++有重要的意义,把运算符重载和类结合起来,可以在C++程序中定义出很有实用意义而使用方便的新的数据类型。运算符重载使C++具有更强大的功能、更好的可扩充性和适应性,这是C++最吸引人的特点之一。 4. 运算符重载 4.3 重载运算符的规则 C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 C++允许重载的运算符 C++中绝大部分的运算符允许重载。不能重载的运算符只有5个: . (成员访问运算符) .* (成员指针访问运算符) ∷ (域运算符) sizeof (长度运算符) ? : (条件运算符) 前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof运算符的运算对象是类型而不是变量或一般表达式,不具重载的特征。 4. 运算符重载 重载不能改变运算符运算对象(即操作数)的个数。 重载不能改变运算符的优先级别。 重载不能改变运算符的结合性。 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“”不必用户重载。 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。 地址运算符也不必重载,它

文档评论(0)

小红帽 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档