9、流类库与输入/输出

网友投稿 624 2022-11-29

9、流类库与输入/输出

9、流类库与输入/输出

就像C语言一样,c++语言中也没有输入/输出语句。但c++编译系统带有一个面向对象的输入/输出软件包,它就是I/O流类库。

1、I/O流的概念及流类库结构

I/O流类库是C语言中I/O函数在面向对象的程序设计方法中的一个替换产品。

当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象。

流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动。程序建立一个流对象,并指定这个流对象与某个文件对象建立连接,程序操作流对象,流对象通过文件系统对所连接的文件对象产生作用。由于流对象是程序中的对象与文件对象进行交换的界面,对程序对象而言,文件对象有的特性,流对象也有,所以程序将流对象看作是文件对象的化身。

与输入输出设备交互也是通过I/O流类来实现的。流所涉及的范围远不止于此,凡是数据从一个地方传输到另一个地方的操作都是流的操作。像网络数据交换、进程数据交换等都是流操作。因此,一般意义下的读操作在流数据抽象中被称为从流中提取,写操作被称为向流中插入。

I/O流类库的基础是类模板,类模板提供了库中的大多数功能,而且可以作用于不同类型的元素,这些类模板都以"basic_"为前缀。

I/O流类库中有两组类模板实例:面向宽字符的和面向窄字符的。面向宽字符的类支持多字节的字符,面向窄字符的类支持单字节字符。头文件中,有很多实例化类型。

2、输出流

一个输出流对象是信息流动的目标,最重要的三个输出流是ostream,ofstream和ostringstream。

预先定义的ostream类对戏那个用来完成向标准设备的输出,包括:

cout标准输出

cerr标准错误输出,没有缓冲,发送给他的内容立即被输出

clog类似于cerr,但是有缓冲,缓冲区满时被输出。

ofstream类支持磁盘文件输出。如果你需要一个只输出的磁盘文件,可以构造一个ofstream类的对象。在打开文件之前或之后可以指定ofstream对象接受二进制或文本模式数据。很多格式化选项和成员函数可以应用于ofstream,包括基类ios和ostream的所有功能。

如果在构造函数中指定一个文件名,当构造这个文件时该文件是自动打开的。否则,可以在调用默认构造函数之后使用open成员函数打开文件,或者在一个由文件指示符标识的打开文件基础上构造一个ofstream对象。

2.1构造输出流对象

之前都是将信息输出到标准输出设备,使用的是cout。如果要使用文件流将信息输出到文件,便需要使用构造函数来建立流对象。

构造输出文件流的常用方法如下:

使用默认构造函数,然后调用open成员函数,例如:

myFile.open("filename",iosmode);//打开文件,使流对象与文件建立联系

或:ofstream * pmyFile=new ofstream;//建立一个动态的输出文件流对戏那个

pmyFile->open("filename",iosmode);//打开文件,使流对象与文件建立联系

在调用构造函数时指定文件名和模式:

ofstream myFile("filename",iosmode);

也可以使用同一个流先后打开不同的文件(在同一时刻只有一个是 打开的):

ofstream ofile;

ofile.open("FILE1",iosmode);//打开文件FILE1

//....向文件“FILE1”输出

ofile.close();//关闭FILE1

ofile.open("FILE2",iosmode);//打开文件FILE2

//....向文件“FILE2”输出

ofile.close();//关闭FILE2

//当对象ofile离开它的作用域时便消亡

2.2使用插入运算符和操纵符

介绍如何控制输出格式以及如何为自己的类建立插入运算符。插入(<<)运算符是所有标准c++数据类型预先设计的,用于传送字节到一个输出流对象。插入运算符与预先定义的操纵符一起工作,可以控制输出格式。

很多操纵符都定义在ios_base类中和头文件中。

1、输出宽度

可以通过在流中放入setw操纵符或调用width成员函数为每个项指定输出宽度。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:北京市小程序开发(北京小程序开发网站华网天下)
下一篇:太原 小程序开发(太原小程序开发定制 餐饮类小程序 饭店小程序开发)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~