轻松学C之运算符重载-公开课件.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文档。上传文档
查看更多
第12章 运算符重载 前一章介绍了多态的实现技术,主要包括函数的重载和虚函数。本章介绍实现多态的另外一个方法——运算符重载及类类型转换。 12.1 运算符重载概述 运算符重载实现的是编译时的多态,是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时,导致不同类型的行为。 12.1.1 运算符重载 C++预定义的运算符只是针对基本数据类型,而对于自定义的数据类型,比如类,却没有类似的运算符。于是,引入运算符重载的目的如图12-1所示。 图12-1 引入运算符重载的目的 运算符重载是运用函数重载的方法,对C++提供的标准运算符重新定义,以完成某种特定的操作。 C++中的每一个运算符对应着一个运算符函数,在实现过程中,把指定的运算表达式中的运算符转化为对运算符函数的调用,而表达式中的运算对象转化为运算符函数的实参,这个过程是在编译阶段完成的。如图12-2中的例子。 图12-2 编译阶段转换 因此,可以将运算符重载看做是一种特殊的函数重载。运算符函数定义的一般形式如图12-3所示。 图12-3 运算符函数定义的一般形式 12.1.2 运算符重载的特点 尽管运算符重载是一种特殊的函数重载,但相比函数重载,运算符重载有着自身的一些特点。 运算符重载使用operator关键字对重载函数进行标识和定义,其有三种形式,如表12-1所示。 表12-1 三种运算符的operator表示形式 C++运算符重载不允许用户自己定义新的运算符,只能对已有的运算符进行重载。在C++中,绝大部分运算符允许重载,只有几个不能被重载,如图12-4所示。 运算符分类 常规表示 operator表示形式 参数个数 中缀 a+b operator +(a,b) 二元 前缀 -a operator-(a) 一元 后缀 a++ operator ++(a) 一元 图12-4 几个不能被重载的运算符 此外,运算符重载时参数个数必须固定,即重载函数的参数个数与标准运算符要保持一致,如图12-5所示。 图12-5 重载函数的参数个数与标准运算符要保持一致 【示例12-1】 下面通过一个示例来理解在实际的程序中是如何进行运算符重载的,其实现代码及结果如图12-6所示。 图12-6 运算符重载实例 关于重载操作符的一些限制: 1. 不能改变重载运算符的优先级和结合性。 2. 默认重载运算符不能用作参数。 3. 不能改变原有运算符的参数个数。 4. 不能创建新的运算符。 5. 并不是所有的运算符都支持重载,但是大多数支持。 12.2 运算符重载形式 运算符的重载形式有两种:一种是重载为类的成员函数;另一种是重载为类的友元函数。对于每一种重载形式,由于运算符不同,都可以分为双目运算符和单目运算符的实现。 12.2.1 运算符重载为类的成员函数 将运算符重载为类的成员函数,称为运算符成员函数。实际使用时,总是通过该类的对象访问重载的运算符。运算符成员函数在类内进行声明,在类外进行定义,一般形式如图12-7所示。 图12-7 运算符成员函数在类内进行声明,在类外进行定义的一般形式 1双目运算符重载为成员函数 双目运算符重载为成员函数时,左操作数是访问该重载运算符的对象本身的数据,此时成员运算符函数只有一个参数。如图12-8所示。 图12-8 双目运算符重载为成员函数 双目运算符重载为成员函数后,就可以在主函数或其他类中进行调用了。在C++中,一般有显式和隐式两种调用方法,如图12-9所示。 图12-9 运算符成员函数的调用方法 【示例12-2】 下面程序对双目运算符进行了重载,并在主函数中调用这些运算符进行具体操作,其分别采用了显式调用和隐式调用两种方式。其实现代码及结果如图12-10所示。 图12-10 双目运算符重载为成员函数实例 2单目运算符重载为成员函数 单目运算符重载为成员函数时,操作数是访问该重载运算符对象本身的数据,由this指针指出,此时成员运算符函数没有参数。如图12-11所示。 图12-11 单目运算符重载为成员函数 与双目运算符的重载类似,单目运算符重载为成员函数后,在调用时也有显式和隐式两种调用方法,如图12-12所示。 图12-12 单目运算符重载为成员函数的调用方法 【示例12-3】 下面程序对单目运算符进行重载,在调用该运算符时也通过显式调用和隐式调用两种方式来实现。其实现代码及结果如图12-13所示。 图12-13 单目运算符重载为成员函数实例 12.2.2 运算符重载为类的友元函数 将重载的运算符成员函数定义为类的友元函数,称为友元运算符函数。友元运算符函数不是类的成员,不属于任何一个类对象,所以没有this指针。因此,重载双目运算符时要有两个参数,重载单目运算符时要一个参数。友元运算符函数在类内进行声

文档评论(0)

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

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

1亿VIP精品文档

相关文档