C++流对象

1、概念
在程序设计当中免不了要对数据进行输入输出,在C语言中我们经常使用scanf()、printf()进行输入输出操作,但是在C++中,我们使用流对象来对数据进行输入输出操作,数据流在输入源和输出目标之间充当了桥梁的作用。
根据操作的数据流对象的不同,C++流对象可以分为控制台流(iostream)、文件流(fstream)以及字符串流(sstream),上述三种类的流均继承基础流类(ios_base、ios)。
具体关系如下图所示:
这里写图片描述

2、控制台流(iostream)
为了控制台程序输入输出的方便,C++控制台流以对象的形式提供了几个常用的流对象方便在控制台对数据流进行输入输出,分别是:cin(输入流)、cout(输出流)、cerr(不带缓存的错误输出流)、clog(带缓存的错误输出流)。

cin对象:当代码执行到cin函数时,控制台会弹出输入框,让你输入,此时当你输入完数据,敲下回车键,cin对象会从缓冲区读取数据流直到遇到第一个空白符为止。所以,使用cin读取数据会跳过空白符(例如,空格,tab、制表符等等),如果想读取这些空白符的话需要使用getchar()函数。但是如果想要读取一行带有空白符的数据怎么办呢?cin对象有一个getline函数:

cin.getline(char s[], int nLength)

注意该函数虽然能够读取空白符,但是不能读取换行符(回车符)。其实每个输入流对象都有其对应的getline()函数,如文件流和字符串流,都有其对应的getline()函数。
在std命名空间下,有一个单独的getline()函数,但是该函数时使用string对象作为参数的,即:

getline(cin, str)

但是该函数也是不能够读取换行符的,可以读取空白符。
如果实现有读取换行符的需求,只能使用GCC进行读取了。

cout对象:使用cout进行输出时,可以使用控制符进行格式化输出,比如使用十进制或者十六进制进行输出,但是有一点需要注意,进行格式化输出时,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。

这里写图片描述

int nInput = 15
cout<<hex<<nInput;
输出结果为f

cout<<setiosflags(ios∷showpos)<<nInput;
输出: +15

3、文件流(fstream)
C++在文件流中提供三个派生类以方便对文件数据流进行操作(注意提供的是类,而不像控制台流直接提供对象),分别是ifstream,ofstream,iofstream。

ifstream:该类主要是处理从外存流向内存的数据流。
ofstream:该类主要是处理从内存流向磁盘的数据流。
fstream:该类主要用来处理磁盘和内存之间数据流的输入和输出。

要想处理磁盘文件,首先必须先定义一个文件流对象,然后将要处理的文件与相应的文件流对象进行绑定,即该文件流对象专门用来处理该文件的数据流。

每一个文件流类都定义了一个成员函数 open 来定位给定的文件,并视情况打开为读或写模式。如果在创建文件流对象时,提供了文件名,则open会被自动调用。没有提供文件名,将会创建空文件流对象,可以随后调用 open 将它与文件关联起来。同时每一个文件流类型都定义了一个文件模式,用于指出如何使用该文件是只读模式还是读写模式等等。

ifstream input(ifile); // 构造一个ifstream 对象input并绑定文件ifile打开该文件;
ofstream output;      // 输出文件流,未关联任何文件
output.open(ofile);   // 打开指定文件

在此要对open函数进行检查,因为调用open函数可能会失败。因此写代码时应该加上判断:

if(out)

一旦一个文件打开,那么该文件流对象就和该文件绑定在一起,如果文件流想要绑定另外的文件,则必须先要关闭与之前文件的绑定

out.close()
out.open(otherFile)

当一个文件流离开其作用域时,与之关联的文件也会失效。

4、字符串输入输出流(sstream)
将字符串作为流进行处理,使得操作字符串像操作流一样,其相应的派生类有istringstream、ostringstream、iostringstream。这些类可以从string读取数据也可以将数据写入string中,它们操作的对象是内存中的string,所以严格意义上来讲,它们不能称之为输入输出流,但是为了方便讲述,我们在此使用输入输出流。字符串流也定义了一些函数来方便管理和操作字符串,比如:

stringstream strStream; //定义一个字符串流对象,但未绑定任何字符串
strStream.str(s);//字符串流对象strStream保存字符串s的一份拷贝
strStream.str()//返回字符串流保存的数据。
  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值