cppchap5 第五章 算符重载和入 出流操作.docVIP

cppchap5 第五章 算符重载和入 出流操作.doc

  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文档。上传文档
查看更多
算符重载与入/出流操作 /downloads67/ebook/241634/cppchap5.doc 在前一章的例27中,当实现复型数c=a+b的运算时是利用类的成员函数进行的。在实用中所期望的是直接利用上式的运算表达式而求解。本章将讨论的算符重载便是解决此类需求的一种技术手段。另一方面本章还将讲述在C++语言中如何使用标准流入/出(cin 和cout)算符并配以格式说明的方法。所有这些也都是C++语言利用它特有的流式类的基本手段为用户提供的便捷的入/出手段。 §1 C++语言的运算符重载(Operator Overloading) 其实算符重载并非在C++语言中才有,C中的“?”号就是一种重载算符。比如: int i = 20,?p; p = i; i = ?p ?2 ; 等表达式中的星号随其位置的不同而引起的操作也不同,这也可以被认为是一种重载。 §1.1 C++语言类中的算符重载 第三章已经讨论了C++语言函数的重载的概念。在C++语言中,大多数的运算符号也可以当作函数名的一部分来使用,这就奠定了算符重载的基础。声明算符重载的格式是: operator C++语言支持的算符(参数描述表) {…} 将前一章最后例27中的类成员函数add(…)和sub(…)分别改写为算符函数后可呈例1的形式: 例1: # include ? stdio.h ? class Complex { double r, i ; public: Complex (double rs = 0.,double is=0.) {r = rs ; i = is;}; Complex operator+(const Complex add_2){return Complex(r+add_2.r, i + add_2.i);} Complex operator?(const Complex sub_2){return Complex(r?sub_2.r, i ? sub_2.i);} void operator!(); }; void Complex::operator!() { if (i?=0) printf (“% .2f + % .2fi\n”,r,i); else printf(“% .2f % .2fi\n”,r,i); } void main() { Complex a(3.,9.),b(7.,8.),c(0.,0.); c=a.operator+(b);//当执行完此表达式后将执行析构函数 printf(“a+b =”); !c; c=b.operator?(a); printf (“b?a=”); !c; } 本例分别作了一元算符‘!’和二元算符‘+’、‘-’的函数重载。例中一元算符‘!’已按它原有的形式(也必须用原有的形式)写在操作对象左面。而二元算符都有意按“operator +”做为函数名写在其对象和参量之间。在对算符函数引用时,C++语言规定作为声明重载算符前的关键字“.operator”可以被省略,其后的“()”也可以被省略。括号内的参数则可直接写在算符之后。这样上例main()函数内的两个引用就可以分别改写成非常简单、熟悉的形式了: c=a+b ; c=b?a ; 可见算符重载使程序的书写大为简化了。上例的运算甚至可以连算,例如写出:“c=a+b+a ;”的形式来,若仍用例中函数的写法,此句将十分冗长且不易读懂。使用算符重载和原算符的关系式时必须注意以下几点: ①算符的分类与算符的限制 须再强调,算符重载是重复利用C++语言的原有算符,并非取消相应算符的原有功能(以运算对象类型区分其功能)。为避免发生二义性,算符重载并不是对全部C++语言所支持的所有算符都通用。下面几种算符就不允许重载:“sizeof、.、?、::、?、??”。而“=、??、??、??”四种算符只能作为类中的成员函数才能被重载。此外不能利用算符重载创造新算符。 ②重载后的算符语义不能发生本质的改变 由上例可见,算符重载普遍适用于一、二元算符,而且被重载的算符仍保留原有的特性以及原有的优先顺序(如先乘除后加减,先右后左等)。如在引用算符重载函数的省略形式时,“!”必须出现在被操作对象的左侧;参数应将移至“??”内等。 例2: # include ? iostream . h ? # include ? string . h ? class Student { char name[10]; float score[3]; static unsigned int sum

文档评论(0)

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

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

1亿VIP精品文档

相关文档