1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
流库结构

第11章 I/O 流 库 11.1 C++ 流 库 结 构 11.2 基本数据类型的输入/输出 11.3 格 式 控 制 11.4 文 件 的 读 / 写 11.5 用户自定义类型的输入/输出 习 题 十 一 11.1 C++ 流 库 结 构 C语言中用输入/输出库函数(如printf( )和scanf( ))来完成程序设计中的输入/输出任务。但C语言的输入/输出库函数既不包含用户自定义的数据类型,用户也不能通过重载这些库函数来实现用户自定义数据类型的输入/输出;而通过重新设计新的函数来实现用户自定义数据类型的输入/输出将增加程序设计的复杂性。 C++语言把设备之间的信息交换称作流,把实现设备之间信息交换的类称作流类,把按面向对象方法组织的许多个流类的类层次集合称作流库。C++语言给用户提供了功能完整的、组织成类层次的、可方便扩充的流库。流库中的每一个流类定义了设备之间一种信息交换方式。 C++语言中的流库主要由两个流类层次组成,一个是以streambuf类为父类的类层次,另一个是以ios类为父类的类层次。streambuf类及其子类主要完成信息通过缓冲区的交换;ios类及其子类是在streambuf类实现的缓冲区信息交换的基础上,增加了各种格式化的输入/输出控制方法。一般来说,用户通过定义ios类层次中的子类的对象,使用该对象所属的类,以及这些类的父类、父父类提供的方法实现数据的输入/输出。 streambuf —filebuf —strstreambuf —stdiobuf 需要说明的是,本章讨论的ios类层次结构以及ios类层次中的运算符和成员函数的原型,都是以Visual C++ 语言为基础的,其它C++语言的ios类层次结构以及相应的函数原型可能与这里讨论的略有不同。 1.streambuf类层次 streambuf类及其派生类主要完成信息通过缓冲区的交换。streambuf类层次结构如图11.1所示。 一般来说,信息交换时需要设置一个缓冲区。所谓缓冲区就是一个队列数据结构。需要交换的信息从信息发出地逐个存入缓冲区中,待缓冲区存满后,再一次性从缓冲区存入信息目的地。信息交换时,在信息发出地和信息目的地之间附加的缓冲区,可以解决信息交换时的格式控制问题,以及信息交换设备的速度不相同造成的资源浪费问题。 streambuf类为所有的 streambuf类层次对象设置了一个固定的内存缓冲区(也称作保留区),该内存缓冲区能动态地划分成用作输入的取区(get area)和用作输出的存区( put area),这两个区可以重叠也可以不重叠。取区定义了一个指示当前取字符位置的取指针,存区定义了一个指示当前存字符位置的存指针。 streambuf类中的私有数据成员主要包括一个字符类型的缓冲区、一个取指针和一个存指针等。streambuf类中的保护成员函数主要包括修改取指针值成员函数、修改存指针值成员函数等。streambuf类中的公有成员函数主要包括基本的缓冲区输入/输出成员函数、状态报告成员函数和错误报告成员函数等。 用户通常是通过下边要讨论的ios类层次来实现数据的输入/输出的,此时ios类层次中的类实现了通过streambuf类完成的通过缓冲区的信息交换,并且隐藏了实现细节。如果用户要自己设计利用streambuf类进行的信息交换,可以通过定义streambuf类的公有派生类,利用streambuf类中定义的操纵取指针和存指针的保护成员函数,来实现用户特定的输入/输出。 filebuf类在streambuf类的基础上增加了文件处理功能。filebuf类使用文件来保存缓冲区中的字符序列。当写文件时,是把缓冲区中的字符序列写到某个指定文件中;当读文件时,是把某个指定文件中的字符序列读到缓冲区中。 strstreambuf类在streambuf类的基础上增加了动态内存管理功能。strstreambuf类实现从内存到缓冲区的信息交换和从缓冲区到内存的信息交换,从而可以在计算机内存之间交换数据信息。 stdiobuf类主要用作C++语言的流类层次方法和C语言的标准输入/输出方法混合使用时系统的缓冲区管理。 2.ios类层次 ios类及其派生类是在streambuf类实现的通过缓冲区的信息交换的基础上,进一步增加了各种格式化的输入/输出控制方法。ios类层次结构如图11.2所示。 ios类是所有ios类层次的基类,ios类主要完成所有派生类中都需要的流的状态设置,状态报告,以及显示精度、域宽、填充字符的设置,文件流的操作模式定义等。 i

文档评论(0)

cbf96793 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档