chapter7 C++的IO流概要1.docVIP

  • 0
  • 0
  • 约 45页
  • 2017-07-02 发布于湖北
  • 举报
chapter7C的IO流概要1

第八章 输入输出流(input/output stream) 的基本概念及原理 8.1 预定义数据类型的输入/输出 8.1.1 基本情况及其优点 C++输入输出流的优点: (一)重载运算符“”和“”能以函数重载的形式极大地扩大用途,在输入输出流中充分体现多态性。 C语言的输入/输出系统本来就灵活性大、功能比较完善。但它有一个较大缺点:无法处理众多的用户自定义数据类型(主要是结构体、类及其对象)。例如,有一个结构体类型exampl如下: struct exampl { int j; char str[80]; } str_ex; 如欲输出此结构体对象str_ex的两个成员的内容,因而笼统地使用如下输出语句printf, printf(“%exampl”, str_ex); 则将会出现编译错误。而C++的输出/输入系统则能很好地解决这个问题。 (二)类型安全(type-safe) [例1]C语言输出语句中的类型错误(第一章已看过) #include stdio.h void main( ) { int i=3; double d=4.4; printf(“%d\t%f\n”, i, d); } 运行结果: 3 4.400000 对! 但如写错为: printf(“%d\t%d\n”, i, d); 则编译时不出错,但运行结果错,为: -26214 但在C++中只须写 couti“ ”dendl;而不必写出变量类型!就能得出 3 4.4,对! 始终不会出错! (三)通过缓存增加功能。 (四)附带优点是书写方便以及显示中没有冗余字符,能自动略去浮点数尾数中的零(但如用户希望显示多余的零,也可显示)。 C++的输入/输出系统是对流的操作,也即操作数据使其流向对象,或从对象流出。 什么是流?流是从源头到目的的数据流动。当键入字符时,字符从键盘流入程序中;当将数据写入磁盘文件中时,数据自程序流动至磁盘上。 C++输入/输出流库是使用继承方法建立起来的一个输入/输出类库,它具有两个平行的基类,即streambuf类和ios类。所有其它流类都是从它们直接或间接地派生出来的。 streambuf类用于提供物理设备的接口,它提供缓冲或处理流的通用方法。它作为一个虚基类,具有类层次如下: 图 8.1 ios类及其派生类用于为用户提供使用流类的接口。它使用streambuf完成检查错误的格式化输入/输出操作,并支持对streambuf的缓冲区进行输入/输出时的格式化或非格式化转换。 ios类作为流库中的一个虚基类,派生出许多派生类,其主要层次如下: 图 8.2 8.1.2 预定义流(标准流)的基本原理 预定义输出输入流涉及较多的头文件有四个:ios.h,istream.h,ostream.h和iostream.h。下面分别介绍。 8.1.2.1 输出流的基本概念 输出流运算符“”是在头文件ostream.h的class ostream中定义的。从图8.2可以看出,class ostream是从class ios中派生出来的。因此下面先看一下用于定义class ios的头文件ios.h。 先看ios.h: /*** *ios.h - definitions/declarations for the ios class. ***/ #ifndef NULL #define NULL 0 #endif #ifndef EOF #define EOF (-1) #endif class ios { public: enum io_state { goodbit = 0x00, eofbit = 0x01, failbit = 0x02, badbit = 0x04 }; (输出输入操作结果的状态) enum open_mode { in = 0x01, out = 0x02, ate = 0x04, app = 0x08, trunc = 0x10, nocreate = 0x20, noreplace = 0x40, binary = 0x80 }; enum seek_dir { beg

文档评论(0)

1亿VIP精品文档

相关文档