面向对象的程序设计语言----C++第08章.pptVIP

面向对象的程序设计语言----C++第08章.ppt

  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文档。上传文档
查看更多
例如,设a、b两个变量都为int型,且已有值,则表达式“a+b”在编译时,将被解释为如下的函数调用形式:operator+(a,b)。 其中,operator是一个关键字,它与后面的“+”共同组成了该运算符函数的函数名。在编译时,系统将检查是否已经定义了一个原型为:operator+(int,int)的函数。由于int是系统预定义的数据类型,所以可以直接用这个已定义的运算符函数operator+(int,int)进行运算。 既然系统预定义的运算符是通过运算符函数调用来实现的,那么, 可见,运算符重载与函数重载的方法一致,是一种特殊的函数重载。 根据前面的知识可知,我们在类中可以采用两种方法对运算符函数进行重载:一是重载为类的成员函数,二是重载为类的友元函数。 将运算符重载为类的成员函数的方法是 其中,operator是关键字、@是需要被重载的运算符。X是需要重载该运算符的类名,TYPE是该运算符函数的返回值类型。关键字operator与后面的运算符@共同组成了该运算符函数的函数名。 在6.1.7节中我们讲过同类的对象之间可以相互赋值,这实际上是C++中系统提供的一个默认的重载的赋值运算符。 这两种方法在功能上是完全等价的,都相当于通过对象调用其成员函数operator!()。 作为友元函数重载后的运算符函数operator!()也可以使用两种方式调用该函数,一种是表达式的方法,如本例中的!s1,另一种方法是通过函数调用的方式,如本例中的operator !(s2)。 从以上两个例子可以看出,单目运算符“!”作为成员函数重载和作为友元函数重载的两种方法虽然在实现上有所不同,但如果采用表达式的方式进行调用时,都与一般运算符的语法一样,为!s1,这样会使编写出来的程序更加自然、简洁。 第8章 运算符重载 本章主要内容 (1)了解运算符重载的概念及意义。 (2)掌握运算符重载为类的成员函数的方法。 (3)掌握运算符重载为类的友元函数的方法。 (4)掌握赋值运算符的重载方法。 北京林业大学 软件教研室 * 8.1 运算符重载的概念 在C++中,所有系统预定义的运算符都是通过运算符函数来实现的。 a+b operator+(a,b) operator+(int,int) int a,b; 北京林业大学 软件教研室 * 在用户自定义的新类中可以重载这些函数。 在类中对运算符函数进行重载的方法: 重载为类的成员函数 重载为类的友元函数 北京林业大学 软件教研室 * 8.2 重载为类的成员函数 在类中定义一个同名的运算符函数来重载该函数。 TYPE X::operator@(形参表) { //函数体 //重新定义运算符@在指定类X中的功能 } 北京林业大学 软件教研室 * 由于将运算符函数重载为类的成员函数,所以,操作的一方当然是当前对象: 如果重载单目运算符,就不必另设置参数; 如果是重载双目运算符,就只要设置一个参数作为右侧运算量,而左侧运算量就是该对象本身。 【例8-1】定义一个表示复数的类Complex,并在该类中对运算符“+”进行重载,以实现两个复数的加运算。 北京林业大学 软件教研室 * 8.3 重载为类的友元函数 定义一个与某一运算符函数同名的全局函数; 然后再将该全局函数声明为类的友元函数,从而实现运算符的重载。 friend TYPE operator@(形参表); 说明: (1)operator是关键字、@是需要被重载的运算符,TYPE是该运算符函数的返回值类型。关键字operator与后面的运算符@共同组成了该运算符函数的函数名。 北京林业大学 软件教研室 * (2)对于双目运算符,参数表中包含两个参数: TYPE operator@(TYPE a, TYPE b) (3)对于单目运算符,参数表中只包含一个参数: TYPE operator@(TYPE a) 【例8-2】定义一个表示复数的类Complex,并在该类中对运算符“-”进行重载,以实现两个复数的减运算。 北京林业大学 软件教研室 * 8.4 运算符重载的限制 (1)在C++中,几乎所有系统预定义的运算符(除“.”、“*”、“::”、“?:”、sizeof外)都可以被重载。 (2)运算符的重载既不会改变原运算符的优先级和结合性,也不会改变使用运算符的语法和参数个数。 (3)运算符函数operator @()通常被声明为类的成员函数或友元函数。其等价的函数调用形式如下表所示。 北京林业大学 软件教研室 * (4)当重载为类的成员函数时,运算符重载函数的形参个数要比运算符操作数个数少一个;若重载为友元函数,则参数个数与操作数个数相同。 (5)“=”、“()”、“[]”和“-”等运算符不

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档