- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在上面程序的基础上增加类型转换函数: operator double( ){return real;} 此时Complex类的公用部分为 public: Complex( ){real=0;imag=0;} Complex(double r){real=r;imag=0;} //转换构造函数 Complex(double r,double i){real=r;imag=i;} operator double( ){return real;} //类型转换函数 //重载运算符“+” friend Complex operator+ (Complex c1,Complex c2); void display( ); 其余部分不变。程序在编译时出错,原因是出现二义性。 可以看到: 重载后置自增运算符时,多了一个int型的参数,增加这个参数只是为了与前置自增运算符重载函数有所区别,此外没有任何作用。编译系统在遇到重载后置自增运算符时,会自动调用此函数。 C++的流插入运算符“”和流提取运算符“”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“”和“”进行了重载,使之作为流插入运算符和流提取运算符,能用来输出和输入C++标准类型的数据。因此,在前面几章中,凡是用“cout”和“cin”对标准类型数据进行输入输出的,都要用#include iostream把头文件包含到本程序文件中。 用户自己定义的类型的数据,是不能直接用“”和“”来输出和输入的。如果想用它们输出和输入自己声明的类型的数据,必须对它们重载。 对“”和“”重载的函数形式如下: istream operator (istream ,自定义类 ); ostream operator (ostream ,自定义类 ); 即重载运算符“”的函数的第一个参数和函数的类型都必须是istream类型,第二个参数是要进行输入操作的类。重载“”的函数的第一个参数和函数的类型都必须是ostream类型,第二个参数是要进行输出操作的类。因此,只能将重载“”和“”的函数作为友元函数或普通的函数,而不能将它们定义为成员函数。 在程序中,人们希望能用插入运算符“”来输出用户自己声明的类的对象的信息,这就需要重载流插入运算符“”。 例3.7 在例3.2的基础上,用重载的“”输出复数。 源码参见3-7.cpp 可以看到在对运算符“”重载后,在程序中用“”不仅能输出标准类型数据,而且可以输出用户自己定义的类对象。用“coutc3”即能以复数形式输出复数对象c3的值。形式直观,可读性好,易于使用。 程序中重载了运算符“”,运算符重载函数中的形参output是ostream类对象的引用,形参名output是用户任意起的。分析main函数最后第二行: coutc3; 运算符“”的左面是cout,前面已提到cout是ostream类对象。“”的右面是c3,它是Complex类对象。由于已将运算符“”的重载函数声明为Complex类的友元函数,编译系统把“coutc3”解释为: operator(cout,c3) 即以cout和c3作为实参,调用下面的operator函数: ostream operator (ostream output,Complex c) { output(c.real+c.imagi)endl; return output; } 调用函数时,形参output成为cout的引用,形参c成为c3的引用。因此调用函数的过程相当于执行: output(c3.real+c3.imagi)endl; return cout; 请注意:上一行中的“”是C++预定义的流插入符,因为它右侧的操作数是字符串常量和double类型数据。执行cout语句输出复数形式的信息。然后执行return语句。 答:能连续向输出流插入信息。output是ostream类的对象,它是实参cout的引用,也就是cout通过传送地址给output,使它们二者共享同一段存储单元,或者说output是cout的别名。因此,return output就是return cout,将输出流cout的现状返回,即保留输出流的现状。 讨论1: return output的作用是什么? 讨论2:请问返回到哪里? 刚才是在执行 coutc3; 在已知coutc3的返回值是cout的当前值。如果有以下输出: coutc3c2; 先处理coutc3,即: (coutc3)c2; 而执行(coutc3)得到的结果就是具有新内容的流对象cout,因此,(co
文档评论(0)