28-1 Input_and_output_streams
输入输出功能并非 C++ 核心语言的一部分,而是由 C++ 标准库提供(因此位于 std 命名空间中)。在之前的课程中,您已经包含了 iostream 库头文件,并使用了 cin 和 cout 对象进行简单的 I/O 操作。在本课中,我们将更详细地了解 iostream 库。
iostream 库
包含 iostream 头文件后,您就可以访问负责提供 I/O 功能的整个类层次结构(包括一个实际名为 iostream 的类)。您可以在这里找到非文件 I/O 类的类层次结构图。
您可能首先会注意到,这种层级结构使用了多重继承(我们之前已经告诉过您要尽可能避免使用多重继承)。但是,iostream 库经过精心设计和广泛测试,已经避免了所有典型的多重继承问题,因此您可以放心使用。
Steams
你可能注意到的第二点是,“流”这个词的使用频率非常高。在C++中,最基本的I/O操作就是用流来实现的。抽象地说,流就是一个可以按顺序访问的字节序列。随着时间的推移,流可以产生或消耗数量几乎无限的数据。
通常我们会处理两种不同类型的数据流。输入流用于保存来自数据生成器(例如键盘、文件或网络)的输入。例如,用户可能在程序当前未预期任何输入时按下键盘上的某个键。程序不会忽略用户的按键操作,而是将数据放入输入流中,并在那里等待程序准备好接收它。
相反,输出流用于保存特定数据使用者(例如显示器、文件或打印机)的输出。当向输出设备写入数据时,该设备可能尚未准备好接收数据——例如,程序向打印机的输出流写入数据时,打印机可能仍在预热。数据将保留在输出流中,直到打印机开始读取它。
有些设备,例如文件和网络,既可以作为输入源,也可以作为输出源。
流的优点在于,程序员只需学习如何与流交互,即可向各种不同类型的设备读写数据。至于流如何与实际连接的设备进行交互,则由环境或操作系统负责。
C++中的输入/输出
ios这是一个std::basic_ios
istream类是处理输入流时主要使用的类。对于输入流,提取运算符 (>>)用于从流中移除值。这很合理:当用户按下键盘上的一个键时,该键码会被放入输入流中。然后,程序会从流中提取该值以供使用。
ostream类是处理输出流时主要使用的类。对于输出流,插入运算符 (<<)用于将值插入流中。这也很合理:您将值插入流中,然后数据使用者(例如监视器)使用这些值。
iostream类可以处理输入和输出,允许双向 I/O。
C++中的标准流
标准流(standard stream)是由计算机环境预先提供给程序的已连接流。C++ 提供了四个预定义的标准流对象,它们已经设置好供您使用。前三个您之前已经见过:
1.cin——一个与标准输入(通常是键盘)绑定的 istream 对象
2.cout——一个与标准输出(通常是显示器)绑定的 ostream 对象
3.cerr——一个与标准错误(通常是监视器)关联的 ostream 对象,提供无缓冲输出。
4.clog——一个与标准错误(通常是监视器)关联的 ostream 对象,提供缓冲输出。
非缓冲输出通常会立即处理,而缓冲输出通常会存储并以数据块的形式写入。由于 clog 流并不常用,因此它通常从标准流列表中省略。
下一课,我们将更详细地了解一些与 I/O 相关的功能。

浙公网安备 33010602011771号