流是什么?什么叫重定向?

本文介绍了C++中流的概念,包括流的定义、从流中提取和插入数据的运算符使用,以及重定向操作。重点讲解了ios_base、ios、istream、ostream和iostream库中这些流类的作用和功能。
摘要由CSDN通过智能技术生成

什么叫流?

在这里插入图片描述

C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。

就像水流一样,从一端流向另外一端,是有方向有起点和终点的动态流动的过程。

如何从流中提取和向流中插入数据呢?

运算符 <<和>>的重载

通常我们会将重载<< 和 >> 运算符(overloaded)以用于输入/输出流操作,也就是说,我们之所以能用cout<<、cin>>输出输入就是因为重载了<<和>>运算符。

<<运算符用于输出,即流插入
<<将右侧的数据发送到左侧的输出流,cout<<"hello"的意思就是将字符串”hello“插入到输出流cout中,而cout的默认目标是输出到显示器。数据往显示器或者控制器的方向流动

>>运算符用于输入,即流提取
>>将左侧的数据发送到右侧的变量中,cin>>num的意思就是从cin流中提取数据到变量num中,而cin的流
来源默认是键盘。数据从键盘到变量流动

重定向

重定向通常指的是 改变标准输入、标准输出或标准错误输出流的方向

理解输出输出重定向
本来cout将数据输出到显示器,此时显示器就是数据的目的地。如果将这个输出的目的地修改为其它外设或文件,我们就把这种 修改输出的方向的行为叫做输出重定向。同理,输入重定向就是修改数据的来源,比如将数据的来源地从键盘修改为某个其它文件。

C++有哪些流类

我们知道C++的cout、cin是通过标准库提供的 <iostream> 头文件中的输入输出流类实现的。也就是说,cout和cin本质上就是某个类的实例化对象。
在cplusplus上我们可以看到
在这里插入图片描述

ios_base类

在这里插入图片描述

ios_base是所有流类的基类(不仅仅是输入输出流),它定义了流的基本特性和操作,例如条件状态、缓冲区管理等。ios是ios_base的派生类,提供了输入/输出操作,如">>“和”<<"操作符。

ios类

在这里插入图片描述

ios是基流类,是所有输入/输出流类的基类。是标准库中定义的一个抽象基类,不能被直接实例化。ios基类为所有流定义了基本的输入/输出操作,例如缓冲区管理、条件状态的处理等。
由于ios是抽象基类,因此不能直接创建ios类型的对象。标准库提供了从ios派生的若干子类,如istreamostream,用于实现具体的输入/输出功能。
ios类的四个直接派生类输入流类istream、输出流类ostream、文件流类fstreambase、串流类strstreambase

在这里插入图片描述

istream、ostream类以及iostream库

在这里插入图片描述

istream、ostream是分别输入流和输出流,是ios类的派生类。
istream类定义了对设备或者buffer的操作方法,包含read、readsome、>>等读取操作。
ostream类定义了若干输入输出函数,主要用于错误处理、流的刷新以及流输入输出方式的控制。 iostream是C++标准库中的一个联合了istream和ostream类的输入输出流类库

常用流类列表

在这里插入图片描述
上图出自b站《郑莉课堂》
在这里插入图片描述

  • 46
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值