对C++IO库的一点理解

    这里并不是讲解C++IO的使用方法,只是关于自己对C++IO库的一点理解,也就是用我自己的解释说明C++IO库到底是什么东西?

    首先,C++语言并不是直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO,这些类型只在3个头文件中定义,即:<iostream>、<fstream>、<sstream>这是三个头文件,它们分别定义了标准输入输出类型、文件输入输出类型、内存输入输出类型,详细如下:

        <iostream>头文件定义:

            (1)istream,从标准输入设备(如键盘)读取数据;(从设备读)

            (2)ostream,向标准输出设备(如控制台)写入数据;(从设备写)

            (3)iostream,可读可写。

        <fstream>头文件定义:

            (1)ifstream,从文件读取数据;(从文件读)

            (2)ofstream,向文件写入数据;(向文件写)

            (3)fstream,可读可写。

        <sstream>头文件定义:

            (1)istringstream,从string读取数据;(从内存读)

            (2)ostringstream,向string写入数据;(向内存写)

            (3)stringstream,可读可写。

    其次,C++IO库其实只处理两种类型输入输出,第一种是设备/文件IO,第二种是内存IO,其中第一种分别对应<iostream>、<fstream>这两个头文件,第二种对应<sstream>头文件,可以对应查看上面关于三种头文件的解释。(为什么三个头文件只分成两类,因为对于内存来说,设备和文件是一样的,都可以理解为外部设备,其实在计算机系统领域,所有的设备都是文件)

    接着,C++IO类型怎么使用?既然它们都是C++IO类型,而C++只是一种语言标准(什么是语言标准,请看关于对编程语言的一点理解),那它没必要分别对待这三种IO类型,所以对于这三种IO类型,你只要会使用其中的一种类型进行IO输出,那另外两种就自然会了,但前提是你要理解每一种IO类型的原理。

    最后,说说到底怎么使用C++IO类型。首先,不用介绍,你肯定使用过cincout这个两个东西,那这两个东西到底是什么呢?首先它们肯定是一个名字,其次它们是一个对象(可想而知,C++就是面向对象的),再者我们一般是这样使用它们,std::cin,这是因为他们是定义在标准库名字空间std下的一个标准输入输出类型的对象,即他们分别是istream和ostream类型的对象。弄清楚了cin和cout的本质,现在就看看使用它们时有什么效果,最直接的就是在使用cout打印一个变量时,如cout << a;,我们就可以在控制台上看到变量a的值,这个说明了什么呢?首先,cout的意思是标准输出流,注意是它是一个“流”,要理解这个词最简单的理解可以把他当做一个管道(或者可以理解成为一个无限大的数组),管道里面装的就是你要输出的内容,然后再来看cout << a;的形式,<<箭头方向向左,就可以理解为把变量a的内容移动到输出流cout中,然后在控制台中显示出来,同理,cin >> b;就是从通过cin把从标准输入(如键盘)输入的内容移动到变量b中。总之,要弄清楚C++IO类型的使用本质,需要理解两个方面:(1)理解“流”的意思,即把所有的IO类型的对象都当做一个对应的流管道;(2)理解 “箭头”,即“<<”和">>"的方向,分别表示向流写或从流读。

    示例:

    如果outlog是一个文件输出流对象,outstring时一个string流输出对象,即分别定义为

ofstream outlog("filename");   

ostringstream outstring(str);  

这种定义形式都可以理解为将一个文件、string流对象绑定到一个对应的文件、string对象,绑定之后,就能通过流对象对文件或者内存进行读写,那么就可以像标准输出流对象cout一样使用outlog和outstring,如outlog << yourname; 表示向文件写入你的名字,outstring << "helloword"表示向一个string输出流写入“helloword”。

    总之,对于三种IO流对象,都需要把流当做一个中间缓存,即作为变量与文件、标准输入输出外设、内存string之间的,要体会这三者之间的数据流向,比如cin对象,其数据流向为从键盘到cin(中间缓存)再到变量,对于ofstream对象,数据流向为变量到中间缓存再到文件,对于istringstream对象,其数据流向为string字符串常量到中间缓存再到string变量。

    另外,所有三种输入流(即从其他部分读取数据的流)cin、ifstream、istringstream默认都是遇到空格终止读取数据。

    当然,这里只是解释C++IO库类型的,关于它们的一些具体用法需要更深入的去了解。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值