第14章I/O流 14.1C++流的概念 142格式化I/O 143检测流操作的错误 14.4文件流 14.5字符串流
第14章 I/O流 14.1 C++流的概念 14.2 格式化I/O 14.3 检测流操作的错误 14.4 文件流 14.5 字符串流
C语言中没有提供专门的输入输出语句,同 样,C艹+语言中也没有专门的输入输出(IO) 语句,C++中的ⅠO操作是通过一组标准IO函 数和Ⅳ0流来实现的。C++的标准IO函数是从C 语言继承而来的,同时对C语言的标准IO函数 进行了扩充。C++的Ⅳ0流不仅拥有标准I/O函 数的功能,而且比标准IO函数功能更强、更方 便、更可靠
C语言中没有提供专门的输入输出语句,同 样,C++语言中也没有专门的输入/输出(I/O) 语句,C++中的I/O操作是通过一组标准I/O函 数和I/O流来实现的。C++的标准I/O函数是从C 语言继承而来的,同时对C语言的标准I/O函数 进行了扩充。C++的I/O流不仅拥有标准I/O函 数的功能,而且比标准I/O函数功能更强、更方 便、更可靠
1141C++流的概念 在C++语言中,数据的输入和输出(简写为I/O) 包括对标准输入设备键盘和标准输出设备显示器、对 在外存磁盘上的文件和对内存中指定的字符串存储空 间进行输入输出这三个方面。对标准输入设备和标准 输出设备的输入输出简称为标准IO,对在外存磁盘上 文件的输入输出简称为文件I/O,对内存中指定的字符 串存储空间的输入输出简称为串I/O C++中把数据之间的传输操作称作流。在C++中, 流既可以表示数据从内存传送到某个载体或设备中, 即输出流;也可以表示数据从某个载体或设备传送到 内存缓冲区变量中,即输入流。在进行IO操作时,首 先打开操作,使流和文件发生联系,建立联系后的文 件才允许数据流入或流出,输入或输出结束后,使用 关闭操作使文件与流断开联系
14.1 C++流的概念 在C++语言中,数据的输入和输出(简写为I/O) 包括对标准输入设备键盘和标准输出设备显示器、对 在外存磁盘上的文件和对内存中指定的字符串存储空 间进行输入输出这三个方面。对标准输入设备和标准 输出设备的输入输出简称为标准I/O,对在外存磁盘上 文件的输入输出简称为文件I/O,对内存中指定的字符 串存储空间的输入输出简称为串I/O。 C++中把数据之间的传输操作称作流。在C++中, 流既可以表示数据从内存传送到某个载体或设备中, 即输出流;也可以表示数据从某个载体或设备传送到 内存缓冲区变量中,即输入流。在进行I/O操作时,首 先打开操作,使流和文件发生联系,建立联系后的文 件才允许数据流入或流出,输入或输出结束后,使用 关闭操作使文件与流断开联系
C++为实现数据的输入和输出定义了一个庞大的类 库,它包括的类主要有ios, Istream, ostream, Iostream, ifstream, ofstream, fstream, istrstream, ostrstream strstream等。其中jos为根基类,它直接派生四个类 输入流类 Istream、输出流类 stream、文件流基类 fstreambase和字符串流基类 strstreambase。输入文件流 类同时继承了输入流类和文件流基类(当然对于根基 类是间接继承),输出文件流类 ofstream同时继承了输 出流类和文件流基类,输入字符串流类 Istrstream同时 继承了输入流类和字符串流基类,输出字符串流类 ostrstream同时继承了输出流类和字符串流基类,输入 输出流类 Iostream同时继承了输入流类和输岀流类,输 入输出文件流类 fstream同时继承了输入输出流类和文 件流基类,输入输出字符串流类 strstr同时继承了输 入输出流类和字符串流基类
C++为实现数据的输入和输出定义了一个庞大的类 库,它包括的类主要有ios,istream,ostream,iostream, ifstream,ofstream,fstream,istrstream,ostrstream, strstream等。其中ios为根基类,它直接派生四个类: 输入流类istream、输 出流类ostream、 文件流 基类 fstreambase和字符串流基类strstreambase。输入文件流 类同时继承了输入流类和文件流基类(当然对于根基 类是间接继承),输出文件流类ofstream同时继承了输 出流类和文件流基类,输入字符串流类istrstream同时 继承了输入流类和字符串流基类,输出字符串流类 ostrstream同时继承了输出流类和字符串流基类,输入 输出流类iostream同时继承了输入流类和输出流类,输 入输出文件流类fstream同时继承了输入输出流类和文 件流基类,输入输出字符串流类strstream同时继承了输 入输出流类和字符串流基类
C++系统中的I0类库,其所有类被包含在 iostream. h, fstrea.h和 strstrea h这三个系统头文件中, 各头文件包含的类如下: iostream. h包含有:ios, Iostream, Istream, ostream, iostream withassign istream withassign, ostream withassign等。 fstream. h包含有: fstream, ifstream, ofstream和 fstreambase,以及 iostream.h中的所有类。 strstrea h包含有: strstream, Istrstream, ostrstrea 和 strstreambase,以及 Iostream.h中的所有类
C++ 系 统 中 的 I/O 类 库 , 其 所 有 类 被 包 含 在 iostream.h,fstream.h和strstrea.h这三个系统头文件中, 各头文件包含的类如下: iostream.h包含有: ios, iostream, istream, ostream, iostream_withassign, istream_withassign, ostream_withassign等。 fstream.h包含有:fstream, ifstream, ofstream和 fstreambase,以及iostream.h中的所有类。 strstrea.h包含有:strstream, istrstream, ostrstream 和strstreambase,以及iostream.h中的所有类
在一个程序或一个编译单元(即一个程序文件) 中当需要进行标准IO操作时,则必须包含头文件 iostream h,当需要进行文件ⅣO操作时,则必须包含头 文件 fstream. h,同样,当需要进行串IO操作时,则必 须包含头文件 strstrea h。在一个程序或编译单元中包含 个头文件的命令格式为“# include”,当 然若头文件是用户建立的,则头文件名的两侧不是使 用尖括号,而是使用双引号。当系统编译一个C++文 件对# include命令进行处理时,是把该命令中指定的文 件中的全部内容嵌入到该命令的位置,然后再编译整 个C++文件生成相应的目标代码文件
在一个程序或一个编译单元(即一个程序文件) 中当需要进行标准I/O操作时,则必须包含头文件 iostream.h,当需要进行文件I/O操作时,则必须包含头 文件fstream.h,同样,当需要进行串I/O操作时,则必 须包含头文件strstrea.h。在一个程序或编译单元中包含 一个头文件的命令格式为“#include”,当 然若头文件是用户建立的,则头文件名的两侧不是使 用尖括号,而是使用双引号。当系统编译一个C++文 件对#include命令进行处理时,是把该命令中指定的文 件中的全部内容嵌入到该命令的位置,然后再编译整 个C++文件生成相应的目标代码文件
C++不仅定义有现成的IO类库供用户使用,而且 还为用户进行标准IO操作定义了四个类对象,它们分 别是cin,cout,cer和clog,其中cin为 istream withassign流类的对象,代表标准输入设备键盘, 也称为cin流或标准输入流,后三个为 ostream withassign流类的对象,cout代表标准输出设备 显示器,也称为cout流或标准输出流,cer和clog含义 相同,均代表错误信息输出设备显示器。因此当进行 键盘输入时使用cin流,当进行显示器输出时使用cout 流,当进行错误信息输出时使用cer或clog
C++不仅定义有现成的I/O类库供用户使用,而且 还为用户进行标准I/O操作定义了四个类对象,它们分 别是cin,cout,cerr和clog,其中cin为 istream_withassign流类的对象,代表标准输入设备键盘, 也称为cin流或标准输入流,后三个为 ostream_withassign流类的对象,cout代表标准输出设备 显示器,也称为cout流或标准输出流,cerr和clog含义 相同,均代表错误信息输出设备显示器。因此当进行 键盘输入时使用cin流,当进行显示器输出时使用cout 流,当进行错误信息输出时使用cerr或clog
C++的流通过重载运算符“>”执行输入 和输岀操作。输出操作是向流中插入一个字符序列, 因此,在流操作中,将运算符“>”称为提取运算符 1. cout 在 ostream输出流类中定义有对左移操作符<<重载 的一组公用成员函数,函数的具体声明格式为: ostream& operator<<(简单类型标识符
C++的流通过重载运算符“>”执行输入 和输出操作。输出操作是向流中插入一个字符序列, 因此,在流操作中,将运算符“>”称为提取运算符。 1. cout 在ostream输出流类中定义有对左移操作符<<重载 的一组公用成员函数,函数的具体声明格式为: ostream& operator<<(简单类型标识符);
简单类型标识符除了与在 istream流类中声明右移 操作符重载函数给出的所有简单类型标识符相同以外, 还增加一个Void*类型,用于输出任何指针(但不能是 字符指针,因为它将被作为字符串处理,即输出所指 向存储空间中保存的一个字符串)的值。由于左移操 作符重载用于向流中输出表达式的值,所以又称为插 入操作符。如当输出流是cout时,则就把表达式的值 插入到显示器上,即输出到显示器显示出来
简单类型标识符除了与在istream流类中声明右移 操作符重载函数给出的所有简单类型标识符相同以外, 还增加一个void* 类型,用于输出任何指针(但不能是 字符指针,因为它将被作为字符串处理,即输出所指 向存储空间中保存的一个字符串)的值。由于左移操 作符重载用于向流中输出表达式的值,所以又称为插 入操作符。如当输出流是cout时,则就把表达式的值 插入到显示器上,即输出到显示器显示出来
2 cIn 在 Istream输入流类中定义有对右移操作符>重载 的一组公用成员函数,函数的具体声明格式为: istream& operator>>(简单类型标识符&); 简单类型标识符可以为char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, flc double, char Signed chars oat, double, long unsigned char*之中的 任何一种,对于每一种类型都对应着一个右移操作符 重载函数。由于右移操作符重载用于给变量输入数据 的操作,所以又称为提取操作符,即从流中提取出数 据赋给变量
2. cin 在istream输入流类中定义有对右移操作符>>重载 的一组公用成员函数,函数的具体声明格式为: istream& operator>>(简单类型标识符&); 简单类型标识符可以为char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, char*, signed char*, unsigned char*之中的 任何一种,对于每一种类型都对应着一个右移操作符 重载函数。由于右移操作符重载用于给变量输入数据 的操作,所以又称为提取操作符,即从流中提取出数 据赋给变量