c++语言第9次课解读.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c语言第9次课解读

4.6 重载流插入和流提取运算符 C++的流插入运算符“”和流提取运算符“”是在类库中提供的,分别是istream类和ostream类。cin 和 cout 分别是istream和 ostream 类的对象。在类库提供的头文件中已经对“”和“”进行了重载,使之成为流流插入、流提取运算符,以进行数据的输入和输出。 凡是用 cout 和 cin 进行输入输出的,都要用 #include iostream.h 语句,把头文件包含到本程序中。 用户自己定义的类型的数据,不能直接用、来输入输出,必须进行重载才行。 4.7 不同类型数据间的转换 标准类型数据间的转换 标准数据间的自动转换:C++支持不同类型数据间的自动转换。比如: int i = 6; i = 7.5 + i; 求解表达式时,编译系统先将整数6转换成double类型6.0,再与7.5相加,和为13.5,然后在赋给整数变量 i 之前,将13.5转换成整数13,并赋给变量 i 。 显式类型转换:C++还支持标准数据间的显式数据类型转换,格式为: 数据类型名 (数据) 注意,它与C语言格式不同,C语言是 (数据类型名) 数据 C++保留了C语言的格式,但提倡用C++的格式。例如, int (13.6);结果等于13。 4.7 不同类型数据间的转换 转换构造函数:即conversion constructor function,它的作用是将一个其他类型的数据转换成指定类的对象。到现在为止,我们已经介绍了以下集中构造函数: 默认构造函数:如complex ( ); 用于初始化的构造函数:如complex (double r, double i) 复制构造函数:如 complex (complex c); 转换构造函数:只有一个形参,如: complex (double r) { real = r; image = 0; } 其作用是将double 型参数 r 转换成 complex 类的对象,将 r 作为复数的实部,虚部为0。 用户可以根据需要自己定义转换构造函数,在函数体中告诉编译系统,怎样进行转换。 4.7 不同类型数据间的转换 类型转换函数 C++用转换构造函数将指定类型的数据转换成类对象,但反过来做,转换构造函数不行。 C++用类型转换函数( type conversion function )来解决这个问题。 类型转换函数的作用:将一个类的对象转换成另一类型的数据。省去了对不同的运算符一一重载的麻烦。 类型转换函数的格式: operator 类型名( ) // 不能指定函数类型,被重载的是类型名 { 实现转换的语句 } // 函数没有参数 例如,已经声明了一个complex类,可以在类中定义如下的类型转换函数: operator double( ) // double类型重载后除了原有含义, { return real; } // 还有将complex对象转换成double类型的含义 4.7 不同类型数据间的转换 转换构造函数和类型转换函数有一个共同的特点:仅在需要的时候,系统会自动调用这些函数。 例如,若已定义double变量到 d1,d2,complex对象 c1,c2。且类中已定义了类型转换函数,设程序有以下表达式: d1 = d2 + c1 编译系统发现“+”左侧的d2是double型,右侧c1是 complex对象,如果没有对“+”重载,就会检测有无类型转换函数,结果发现对double的重载函数,就调用该函数,将complex对象c1转换成double型数据,建立了一个临时的double型变量,并与d2相加,最后将double 型的和数赋给变量d1。 4.7 不同类型数据间的转换 类型转换函数也使用operator关键字,因此也称为“类型转换运算符重载函数”。下面是一个运算符重载、转换构造函数的综合程序: 4.7 不同类型数据间的转换 程序分析: 如果没有定义转换构造函数,程序出错,因为即使重载运算符,也不能让complex对象与double数据相加。 定义了转换构造函数,也重载了“+”运算符,在处理c1+2.5时,编译系统解释为operator +(c1, 2.5),由于2.5不是complex 对象,系统先调用转换构造函数 complex(2.5),建立一个临时对象,其值为( 2.5 +0i )。表达式便成为:operator + (c1,complex(2.5)),两对象相加,结果赋给c3。 如果运算符重载为成员函数,其第一个参数必须是本类对象。当第一个操作数不是类对象时,不能将运算符重载为成员函数,否则交换律不适用。 4.7 不同类型数

文档评论(0)

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

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

1亿VIP精品文档

相关文档