(精)C++第12章课件.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 类型转换运算符函数必须是类的成员函数,不能是友元函数,不带参数,且不必指定其返回类型。如将一自定义的类对象转换为类型名规定的数据类型,其在类中声明的格式如下: operator 类型名( ); 因为类型名就代表了它的返回类型,所以函数不需要定义返回类型。 举例说明,如果将分数类型对象强制转换成浮点数数据,则其在类中的类型转换运算符函数的原型声明为: operator double( ); * class Fra //分数类 { double num; double den; public: Fra(double=0, double=1); operator double (); //成员函数,分数类对象转换为浮点型数据 }; Fra::operator double() { return num/den; } //返回double类型 void main() { Fra fra1(1,4),fra2(3,5),fra3; fra3=fra1+fra2; //隐式调用类型转换运算符函数转换类型后再运算 coutfra1=fra1\tfra2=fra2endl; //隐式调用类型转换运算符函数转换类型后输出 coutfra3=fra3endl; //隐式调用类型转换运算符函数转换类型后输出 } * 对于fra3=fra1+fra2; C++系统依次: ①寻找成员函数定义的“+”运算符(未找到); ②寻找友员函数定义的“+”运算符(未找到); ③寻找类型转换运算符函数,查看其转换后的类型是否支持“+”运算符。结果找到operator double( ),发现两对象操作数经该函数转换后,可以匹配系统标准类型double的加法。相加后得到一个double类型的结果,再将该结果转换成一个Fra类型的临时对象,赋值给Fra类型的对象fra3。 同理,语句coutfra1; 也是首先寻找是否存在重载的输出对象的运算符“”,当未找到时,再寻找类型转换运算符函数,看看转换后的类型能否支持“”格式,结果转换后对象类型变为double类型,用编译系统定义的“”就可以直接输出。 * 注意: ●转换函数只能是成员函数,不能是友元函数。 ●转换函数的操作数是对象。 ●转换函数可以被派生类继承,也可以被说明为虚函数。 ●在一个类中可以定义多个转换函数。 * 重载流插入和流提取运算符 C++的流插入运算符“”和流提取运算符“”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream。cin和cout分别是istream类和ostream类的对象。在类库提供的头文件中已经对“”和“”进行了重载,能用来输出和输入C++标准类型的数据,如整型、浮点型等。 用户自己定义类型的数据,如类的对象等,是不能直接用“”和“”来输入和输出的。如果想用“”和“”运算符直接对自定义类型的对象进行操作,就必须对它们重载,并且只能将它们重载为对应类的友元函数。 * 重载流插入运算符 在类中对流插入运算符声明的格式如下: friend ostream operator(ostream, 自定义类名); 其中,ostream是输出流类,cout是输出流类的一个对象,执行coutx; 就好像x被插入到输出设备上,故“”称为流插入运算符。 流插入运算符函数的返回值依旧是输出流类ostream的对象,这样才能连续使用“”运算符向输出流插入信息,如coutx1x2; 等。在分数类体中声明的重载“”运算符的友元函数原型说明的格式解释如图所示: * Fra fra1(3,4); coutfra1; //调用重载函数,重新解释了流插入运算符 //相当于operator (cout, fra1); * 实现将分数类的对象用运算符“”直接输出的友元函数为: ostream operator(ostream out, Fra fra) { outfra.num/fra.denendl; return out; } 在执行语句coutfra1;时,调用上述函数,形参out是cout的引用,形参fra是fra1的引用,因此调用过程相当于执行: coutfra1.num/fra1.denendl; return cout; 即输出对象信息后将输出流cout的现状返回,这样就可以连续使用输出流。 * 重载流提取运算符 在类中对流提取运算符声明的格式如下: friend istream operator(istream, 自定义类名); 其中,istream是输入流类,

文档评论(0)

xiaofei2001128 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档