第六章流类与输入.ppt

上传人:本田雅阁 文档编号:2261671 上传时间:2019-03-12 格式:PPT 页数:21 大小:171.51KB
返回 下载 相关 举报
第六章流类与输入.ppt_第1页
第1页 / 共21页
第六章流类与输入.ppt_第2页
第2页 / 共21页
第六章流类与输入.ppt_第3页
第3页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第六章流类与输入.ppt》由会员分享,可在线阅读,更多相关《第六章流类与输入.ppt(21页珍藏版)》请在三一文库上搜索。

1、第六章 流类与输入 / 输出,C+ 中除了可使用C中常见的scanf ( ) ,printf( ) 外,为了适 应OOP ,添加了用于对象I /O 的流类库 6.1流的基本概念 终端 物理设备 磁盘驱动器 抽象为流的逻辑设备 打印机 流 流类 流类库,流以相同的方式(I/O 操作函数形式相同) 操作各异的物理设备,格式,状态信息 缓存类 缓存 ios中一根指针 见下)提供输入操作。 ostream类:创建输出流(重载了见下)提供输出操作。 iostream类:创建输入/出流,提供输入/出操作。 class istream : public virtual ios class ostream :

2、 public virtual ios class iostream : public istream , public ostream ,6.2 流库的基本结构,ios,streambuf,buf,istream,ostream,iostream,预定义流 物理设备,对应,6.3 流库中定义的 提取( )和 插入( )提取, 为istream 类,重载各种基本类型 重载函数格式: istream,从流中输入,输出到流,char float unsigned/ int double char * signed short long double long,( 输入/出,仅适用于已定义的参数类型

3、 若自定义的类对象,(nameclass)就不可直接施 于 cin nameclass 或cout () 。且只能 重载为友元函数。,同 ,再添加 (void * ),说明,例(1)类矩形Rectangle,以友元函数重载 class Rectangle private : int width ; int height ; public : Rectangle ( int w , int h ) width = w ; height = h ; friend ostream ,ostream ,分析可知: (1) 只能重载为类的友元函数 (2)对于输出 ( ) 返回类型是对 istream 类

4、引用,这样,就可在一条 cin 语句中使用多个 作多个对象的输入。 (6) ( ) 第一参数是对 istream 类引用, 否则,若是局部对象, operator ( ) 不能返回对它的引用。 (7) ( ) 第二个参数必须是引用类型,否则,无法对实际参数对象作 输入改变。(不能保证形参,实参为同一对象!),6.4 流的 格式控制 和 错误处理 p137 1. 格式标志 在 ios 类中定义了一个公共的枚举类型,表示“格式标志” 例:ios: skipws 表示 0x 00001 其他见下表, ios:成员函数法 格式操作算子(因子)法 (算子作独立对象,可直接插入或提取操作),2. ios

5、: 成员函数- 设置或获取格式信息 例 EX_FormatFunc (p138) #include void main ( ) int nNum=12345; double dNum=12345.6789; char *str = “ This”, “is”, “a Test!”; cout .setf ( ios: oct | ios:showbase| ios: showpos ); cout nNum t dNum endl ; cout . setf ( ios: hex | ios:scientific | ios: uppercase ); cout nNum t dNum end

6、l ; cout .fill ( * );,for ( int i =0; i 3 ; i+) cout .width ( 12 ) ; cout str i “ ” ; cout endl ; cout .setf ( ios: left); for ( int i =0; i 3 ; i+) cout .width ( 12 ) ; cout str i “ ” ; cout endl ; ,3. 使用格式算子(因子)操作 ( 算子作独立对象,可直接插入或提取操作) 预定义的格式算子,例 Ex_Formator (p139) #include #include void main ( )

7、int nNum=12345; double dNum=12345.6789; char *str = “ This”, “is”, “a Test!”; cout setiosflags ( ios: oct | ios:showbase| ios: showpos ); cout nNum t dNum endl ; cout setiosflags ( ios: hex | ios:scientific| ios: uppercase ); cout nNum t dNum endl ; cout setfill ( * );,for ( int i =0; i 3 ; i+) cout

8、 setw ( 12 ) str i “ ” ; cout endl ; cout setiosflags ( ios: left); for ( int i =0; i 3 ; i+) cout setw ( 12 ) str i “ ” ; cout endl ; ,4.流的错误处理 ios类,定义一个公有枚举成员 io_state记录各种错误 enum io_state goodbit= 0x00, / 正常 eofbit = 0x01, / 达文件尾 failbit =0x02, /操作失败 badbit =0x04 / 非法操作 io_state: 2位 1位 0 位 badbit

9、failbit eofbit 全0 操作正常! cin . rdstate ( ) / 获取流对象cin 当前状态值 if ( ! cin . rdstate ( ) ) cout “流对象cin 操作正常 OK !” ;,流出错,相应流记录错误,调用检测函数查错,调用clear() 清除查错,ios:检测成员函数 p140 int ios:rdstate(); /返回当前流状态 int ios:bad(); / 若badbit 置位,返回非0 void ios:clear(int); /清除错误状态 int ios:eof(); /遇文件尾,返回非0 int ios:fail(); /若fi

10、albit 置位,返回非0 int ios:good(); /操作正常,返回非0, Ex_manipError 检测流的错误 #include void main ( ) int i ,s; char buf 80; cout i ; s= cin. rdstate() ; / 获取输入流对象的状态 cout i ; s= cin.rdstate() ; ,置 failbit=2 操作失败,5. 使用输入/ 输出成员函数 get( ) 和 getline( ) 输入字符和字符串 int get ( ); / 提取一个字符,转换为整数 istream / 遇n 停止提取,提取n ,但不保存n 例子见p142 本章讲稿有添加内容 作业: P375/49 将“写到磁盘文件point.txt中”改为“显示输出”,注 意:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1