第8讲 操作符重载.pptVIP

  1. 1、本文档共28页,可阅读全部内容。
  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文档。上传文档
查看更多
第8章 操作符重载 重载是C++多态性的体现之一。 C++语言允许程序员重新定义已有的操作符,使其能按用户的要求完成一些特定的操作,这就是所谓的操作符重载。操作符重载与函数重载相似,其目的是设置某一操作符,让它具有另一种功能,尽管此操作符在原先C++语言中代表另一种含义,但他们彼此之间并不冲突。C++会根据操作符的位置辨别应使用哪一种功能进行操作。 8.1操作符重载概述 1. 重载的意义    赋予操作符新的含义,使它能象完成标准类型的数据操作一样来完成对类对象的操作。 2.重载规则 (1)只能重载C++语言中原先已有定义的操作符。 (2)不能重载下列四个操作符: . , .* , :: ,? : (3)不能改变操作符的操作数个数。 (4)不能改变操作符原有的优先级。 (5)不能改变操作符原有的结合特性。 (6)不能改变操作符对预定义类型数据的操作方式。 3.重载形式有两种: 成员函数形式和友元函数形式。 8.2 操作符重载为类的成员函数 假设需要针对类X重载操作符“@”(@代表任何一个被重载的操作符),则在定义类X时,可用如下形式来实现该操作符重载: class X { …… public: ReturnType operator@(参数表); …… }; 其中: ReturnType为操作符函数的返回值类型,即操作结果的类型; operator为操作符重载时必须使用的关键字,它和被重载的操作符连在一起,作为操作符函数的专用函数名,务必把该函数说明为公有的; @是被重载的操作符; 参数表中列出该运算符所需要的操作数,如下所述: (1)重载一元(单目)操作符时,参数表为空。在这种情况下,当前对象(即,调用该操作符函数的对象)作为该操作符唯一的操作数。 (2)重载二元(双目)操作符时,参数表中有一个参数。在这种情况下,当前对象作为该操作符的左操作数,参数作为右操作数。 不难看出,当使用成员函数重载运算符时,定义操作符函数的方法与定义普通成员函数的方法基本相同,唯一差别是,操作符函数的名字必须为operator@(@为任何一个被重载的运算符),而不能由程序员随意为运算符函数起名字。 例:复数类中以成员函数形式重载操作符+ #includeiostream.h class Complex{ public: Complex(int r=0,int i=0); void display(); Complex operator+(Complex c); protected: int real; int imag; }; Complex::Complex(int r,int i) { real=r; imag=i; } void Complex::display() { coutreal(imag0?+:)imagiendl; } Complex Complex::operator+(Complex c) { return Complex(real+c.real,imag+c.imag); } 8.3 操作符重载为友员函数   假设需要针对类X重载操作符“@”(@代表任何一个被重载的运算符),则在定义类X时,可用如下形式来实现该操作符重载,使它成为类X的友元函数: class X { …… friend ReturnType operator@(参数表) …… } 该格式与前面说明运算符函数使之成为类X的成员函数的格式相比,主要有以下几点差别: (1)在函数原型前多了一个关键字friend。 (2)由于是友元函数,因此在类X的公有段和私有段说明此函数的效果相同;而若作为成员函数说明运算符函数,则必须放在类X的公有段,否则无法公开使用被重载的运算符。 (3)由于这样说明的操作符函数是类X的友元函数而不是成员函数,因此它没有this指针。由此可以推知,必须在参数表中显式列出每一个操作数。因此,用友元函数重载运算符时参数表中参数个数,比用成员函数重载运算符时参数表中的参数个数多一个。也就是说,重载一元操作符时参数表中应该有一个参数;重载二元操作符时参数表中应该有两个参数,其中第一个参数作为左操作数,第二个参数作为右操作数。 用友元函数重载之后,操作符的语义: (1)一元操作符的语义。 如果在类X中重载了一元运算符@,xobj为X类的一个对象,则@xobj或xobj@的语义为:operator@(xobj)

文档评论(0)

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

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

1亿VIP精品文档

相关文档