文档介绍:第八章输入输出流(input/outputstream) 预定义数据类型的输入/ 基本情况及其优点C++输入输出流的优点:(一)重载运算符“<<”和“>>”能以函数重载的形式极大地扩大用途,在输入输出流中充足体现多态性。C语言的输入/输出系统本来就灵活性大、功能比较完善。但它有一个较大缺点:无法处置众多的用户自定义数据类型(主要是结构体、类及其对象)。例如,有一个结构体类型exampl如下:structexampl{intj; charstr[80]; }str_ex;如欲输出此结构体对象str_ex的两个成员的内容,因而笼统地使用如下输出语句printf,printf(“%exampl”,str_ex);则将会出现编译错误。而C++的输出/输入系统则能很好地解决这个问题。(二)类型安全(type-safe)[例1]C语言输出语句中的类型错误(第一章已看过)#include<>voidmain(){ inti=3; doubled=; printf(“%d\t%f\n”,i,d);}运行结果:3 对!但如写错为: printf(“%d\t%d\n”,i,d);则编译时不出错,但运行结果错,为:-26214但在C++中只须写 cout<<i<<“ ”<<d<<endl;而不必写出变量类型!就能得出3 ,对!始终不会出错!(三)通过缓存增加功能。(四)附带优点是书写方便以及显示中没有冗余字符,能自动略去浮点数尾数中的零(但如用户希望显示多余的零,也可显示)。C++的输入/输出系统是对流的操作,也即操作数据使其流向对象,或从对象流出。什么是流?流是从源头到目的的数据流动。当键入字符时,字符从键盘流入程序中;当将数据写入磁盘文件中时,数据自程序流动至磁盘上。C++输入/输出流库是使用继承方法建立起来的一个输入/输出类库,它具有两个平行的基类,即streambuf类和ios类。所有其他流类都是从它们直接或间接地派生出来的。streambuf类用于提供物理设备的接口,它提供缓冲或处置流的通用方法。它作为一个虚基类,具有类层次如下:。它使用streambuf完成检查错误的格式化输入/输出操作,并支持对streambuf的缓冲区进行输入/输出时的格式化或非格式化转换。ios类作为流库中的一个虚基类,派生出许多派生类,其主要层次如下:iosistreamfstreambaseostreamfstreamistream-withassignostream-withassigniostreamiostream- 预定义流(标准流)的基本原理预定义输出输入流涉及较多的头文件有四个:,,。下面分别介绍。“<<”。,classostream是从classios中派生出来的。。:/****-definitions/declarationsfortheiosclass.***/#ifndefNULL#defineNULL0#endif#ifndefEOF#defineEOF(-1)#endifclassios{ public:enumio_state{goodbit=0x00,eofbit=0x01,failbit=0x02,badbit=0x04}; (输出输入操作结果的状态)enumopen_mode{in=0x01,out=0x02,ate=0x04,app=0x08,trunc=0x10,nocreate=0x20,noreplace=0x40,binary=0x80};enumseek_dir{beg=0,cur=1,end=2}; //文件指针位置enum{skipws=0x0001,left=0x0002,right=0x0004,internal=0x0008,dec=0x0010,oct=0x0020,hex=0x0040,showbase=0x0080,showpoint=0x0100,uppercase=0x0200,showpos=0x0400,scientific =0x0800,fixed=0x1000,unitbuf=0x2000,stdio=0x4000};onstlongbasefield;//dec|oct|hex(不同