C为何有自己的IO系统_第1页
C为何有自己的IO系统_第2页
C为何有自己的IO系统_第3页
C为何有自己的IO系统_第4页
C为何有自己的IO系统_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章流库,6.1为何有自己的I/O系统,一、的/ 、不包含预定义的输入和输出函数;通过外部库实现。 如:stdio iostream 、特点 优点:灵活性大、功能强 缺点:不提供用户定义对象的支持,例: struct my_struct int count; char s80; double balance; cust,想用printf实现输出: printf(“%my_struct”,cust); 是不能实现的,printf只能识别预定义类型,不能将功能延伸到新的数据类型,的改进: 、与原的输入输出函数有重复; 、进行重载,使标准的输入输出运算符能处理用户定义类型,扩充了功能; 、采用继承

2、的方法建立实用的流库,功能更强大、方便,并便于扩充,6.2C流库结构,一、定义 C+流库(stream library)是用继承方法建立起来的一个输入输出类库,包含有两个平行基类:streambuf类、ios类,在iostream.h中定义。所有流类均以两者之间作为其基类,1、streambuf:负责缓冲区处理,1)提供对缓冲区的低级操作, 如:对缓冲区指针进行操作、从缓冲区取字符、向缓冲区存储字符等。 (2)主要是作为流库的其它部分使用的基类,Streambuf:负责缓冲区处理,filebuf,strstreambuf,conbuf,使用文件来保存字符序列。 扩展了基类的文件处理能力,使用串

3、来保存字符序列。 扩展了基类在内存中提取和插入操作的缓冲区管理,提供光标控制、设置颜色、定义活动窗口、清屏、清一行等成员函数,为输出操作提供缓冲区管理。 (Borland C+3.0,3)streambuf的派生类,与基类不同在于对输入缓冲区指针和输出缓冲区指针的处理方法,并根据各自的用途扩充了特殊的操作。 (4)存在于几个.h文件中。 (5)使用:一般应使用streambuf的派生类,2、ios类及其派生类:提供用户使用流类的接口 (1)提供输入和输出所需要的公共操作。 (2,一个指向streambuf的指针,格式化标志:format flags,io_state:对I/O错误进行处理,3)

4、相关流:相互关联的流,其中之一被使用时,其它流也受影响。 如:cin, cout,ios:用户使用流类的接口,istream,ostream,fstreambase,strstreambase,提供对streambuf进行插入时的格式化或非格式化转换,并对所有系统预定义的类型重载输入运算符“”; 提供了流的大部分输入操作,提供对streambuf的格式化或非格式化输出,对于预定义类型,重载了输出运算符:“”; 提供了流主要的输出操作,提供文件流的公共操作,如:文件打开、关闭、连到打开文件的文件描述字、返回所用的缓冲冲以及使用指定的缓冲区等,专门处理字符串流,4)ios直接派生的层次上,定义了输

5、入流、输出流、文件流、串流的基本操作。以此四种流类为基础流类,可以组合出多种实用的流: 如:输入/输出流、输入/输出文件流、输入/输出串流、 屏幕输出流、输入文件流、输出文件流、输入串流和输出串流,3、C的几个预定义流: cin:与标准输入设备相关的流; cout:与标准输出设备相关的流; cerr和clog:与标准错误输出设备相关的流;(cerr没有被缓冲,发给它的任何内容立即输出,6.3输入和输出,6.3.1istream,一、istream提供主要的输入操作,是用户使用流库的主要界面之一。 二、istream的简要介绍 1、重载了6个get函数 2、getline:与get功能相同,只是

6、分界符也读入 3、read:输入给定数据的字符到数组 4、辅助操作: 5、随机移动文件指针,6.3.2ostream,一、ostream提供主要的输出操作,是用户使用流库的主要界面之一。 二、ostream的简要介绍 1、输出操作 2、随机移动文件指针,6.3.3输出运算符“,一、又称为插入运算符,包含两个操作数: 1、左操作数:ostream类类型的对象; 2、右操作数:一个预定义类型的变量,也可为重载了该运算符的类的对象。 3、可以识别预定义类型,也可以识别重载后的类的对象。 二、运算: 1、采用左结合的方式 2、重载并不改变运算符的优先级。 三、实例61,6.3.3输出运算符“,一、又称

7、为提取运算符,包含两个操作数: 1、左操作数:istream类类型的对象; 2、右操作数:一个预定义类型的变量,也可为重载了该运算符的类的对象。 3、可以识别预定义类型,也可以识别重载后的类的对象。 二、运算: 1、采用左结合的方式 2、输入语句将跳过空白,从标准输入读取数字。 三、实例62 四、”的重载:第二个参数必须是一个引用,目的在于obj的值能在函数外被修改,6.4格式控制,C中可以用C的printf和scanf进行格式化I/O(缺点在哪里?)。 又提供了两种进行格式控制的方法 1、使用ios类有关格式控制的成员函数; 2、使用操纵符(manipulator)的特殊类型函数,6.4.1

8、用ios类成员函数格式化,一、格式由状态标志确定,状态标志在状态量中各占一位; 二、详细的格式控制枚举量(表6-1); 三、使用ios成员函数对流的输入输出操作进行格式控制: 1、设置状态标志:setf long ios:setf(long flags) 格式状态标志存放于一个long整数中,每个状态标志是整数long中的一位。 使用方法: stream.setf(ios:showbase) 实例,2、清除状态标志:unsetf long ios:unsetf(long flags) 3、取状态标志: long ios:flag();返回与流相关的当前的状态标志值; long ios:flag

9、(long flags);将流的状态标志值设置为flags并返回设置前的状态标志值。 4、设置域宽,填充字符,设置精度 int ios:width(int len);设置域宽,并返回原来的域宽; int ios:width();返回当前域宽 char ios:fill(char ch); 填充字符 int ios:precision(int num);设置显示精度,6.4.2用操纵函数控制格式,一、操纵函数: 特殊的,类似于函数的运算符操纵符。以一个流引用作为参数,并返回同一流的引用,因此,可以嵌入到输入或输出操作链中。 1、实例: 2、操纵符函数仅改变流的状态标志; 3、标准操纵符函数(表62); 4、在任何时候刷新流ostream: ostreamflush; 5、用户可自定义操纵符函数,6.5文件I/O,文件的读出过程可以分解为三个抽象的概念: 往流中加入一个字符; 从流中取出一个字符; 一旦建立一个流,把它与文件相关连以便用来读写。 因此,C和C对文件处理的不同:把文件看为流,要进行文件操作,先要建立流,然后将文件与流相关联(打开文件),然后进行读写,读写完成后,关闭文件,6.5.1 文件的打

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论