C++程序设计流类库与输入输出_第1页
C++程序设计流类库与输入输出_第2页
C++程序设计流类库与输入输出_第3页
C++程序设计流类库与输入输出_第4页
C++程序设计流类库与输入输出_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、C+程序设计流类库与输入程序设计流类库与输入/输出输出C+的基本流体系文件流输入/输出(I/O):输入:从某处接受一个序列,并将其转换为对象所要求的格式赋给对象;输出:将一个对象转换为一个序列传送到另一个地方;源:输入数据来自的地方称为源;目标:接收输出数据的地方称为目的;流(stream)流:在程序员与被使用的设备之间的抽象界面称为流。逻辑设备:所有外部设备的总称;对逻辑设备而言只有两类基本操作: (1)从逻辑设备上读取数据,(2)将数据写入逻辑设备。文本流:由一串ASCII字符所组织的数据流。如源程序文件,word文件。这种文本流可以直接输出到显示器或送到打印机。二进制流:将数据以二进制形

2、式存放,在数据传输时不进行任何变换。 使用流类库来完成输入/输出,比使用传统语言中的库函数至少有两个方面的优点(1)流具有严格的类型检查机制,可减少因使用不当而引起的程序错误;(2)流是面向对象的,可以利用类的继承和多态性,给用户提供统一的接口,因而使用较少的成员函数就能实现更多的功能。C+中输入/输出的基本流类体系: 是一个派生类体系,以抽象类ios为基类。ios(虚基类)istreamostreamstreambuffilebufiostreamios(streambuf*)publicpublicpublic说明:streambuf不是ios类的派生类,只是类ios中的一个streamb

3、uf类对象的指针,用来管理一个流的缓冲区。类ios是类istream和ostream的虚基类,提供对流进行格式化输入输出操作和错误处理的成员函数;类istream和ostream由ios公有派生, istream提供完成输入操作的成员函数, ostream提供完成输出操作的成员函数;iostream由istream和ostream由公有派生,不提供新的成员函数,只将两类的成员函数组合支持流实现完整的输入和输出操作;ifstreamofstreamfstreamios(虚基类)istreamostreamstreambuffilebufiostreamios(streambuf*)publicp

4、ublicpubliccin.cout,cerr,clogpublicpublicpublic C+的输入输出流类库中定义了四个流:cin,cout,cerr,clog;(1)cin是istream的公有派生类istream_withassing的对象;所对应的物理设备为键盘,实现从键盘输入数据;(2)out,cerr,clog是类ostream的公有派生类ostream_withassign的对象;所对应的物理设备为显示器,实现将信息输出到显示器;因此,流实际就是输入输出类的对象。其中cin、cout和clog是带缓冲区的,缓冲区由streambuf类对象来管理。而cerr为非缓冲区流,一旦

5、错误发生立即显示。9.3 标准设备的输入/输出#includevoid main(void)cerri;clogi*i=i*in;说明:通常情况下可以用cerr,clog代替cout。但流cout允许输出重定向,而cerr,clog不允许。例9.1 使用流cerr和clog实现数据的输出缓冲区 系统在主存中开辟的一个专用区域,用来临时存放输入和输出信息,如先将源输入的信息送到该区域,然后从该区域中取出数据。这种区域就称为缓冲区。 我们已经知道,在C+中除cerr是非缓冲流外,cin,cout和clog都是缓冲流。(1)缓冲的输出流cout,clog,仅当输出缓冲区満时,才将缓冲区中的信息输出。

6、(2)输入缓冲流cin,仅当输入一行后,才开始从缓冲区中取数据。 当希望把输出信息送到缓冲区后立即输出时,必须强制刷新(flush)输出流,要求系统立即将缓冲区中的输出信息送到与流相联系的设备上输出。例9.2 输出的信息在显示器上不显示#include#includevoid main(void)double num=-234567987;coutnum=numn;coutsetprecision(10)num=numn; /A /cout.precision(10);int *p;*p=34567;cout*pn;delete p;为将缓冲区中的信息显示出来,必须将A行改写为:coutset

7、precision(10)num=num”:从流中提取一个字符序列(输入cin);插入运算符“” 和 “” 和 “” 对不同类型的数据进行了重载。插入运算符 “” 重载18种不同形式的成员函数在istream.h中)。 在重载这两个运算符时,将它们说明为类的友元函数。friend istream& operator(istream &, classname &);说明:(1)函数的返回值必须是对类istream的引用,这是为了在cin中可以连续使用“”运算符。(2)函数的第一个参数必须是类istream的引用,它将作为运算符的左操作数;(3)函数的第二个参数为用户自定义

8、类的引用,并作为运算符的右操作数。重载提取运算符时的格式为:friend ostream& operator(ostream &, classname &);说明:(1)函数的返回值必须ostream类的引用,这是为了在cout中可以连续使用“”运算符。(2)函数的第一个参数必须是ostream类的引用,它将作为“”运算符的左操作数;(3)第二个参数为用户自定义类的引用(也可以是类的对象),并作为“”运算符的右操作数;重载插入运算符时的格式为:例: 重载提取和插入运算符,实现对象的输入和输出#includeclass Moneyint Dollar, Cents;public:friend ostream& operator(istream&, Money&);Money(int m=0, int c=0)Dollar=m; Cents=c;ostream& operator(ostream& os, Money& m)os$m.Dollar元元tm.Cents分分(istream& is, Money& m)ism.Dollarm.Cents;return is;void main(v

温馨提示

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

评论

0/150

提交评论