C++流的基本概念

在C++语言中,数据的输入和输出(简写为I/O)包括对标准输入设备键盘和标准输出设备显示器、对在外存磁盘上的文件和对内存中指定的字符串存储空间(当然可用该空间存储任何信息)进行输入输出这三个方面。对标准输入设备和标准输出设备的输入输出简称为标准I/O,对在外存磁盘上文件的输入输出简称为文件I/O,对内存中指定的字符串存储空间的输入输出简称为串I/O。

C++语言系统为实现数据的输入和输出定义了一个庞大的类库,它包括的类主要有ios,istream,ostream,iostream,ifstream,ofstream,fstream,istrstream,ostrstream,strstream等,其中ios为根基类,其余都是它的直接或间接派生类。

ios为根基类,它直接派生四个类:输入流类istream、输出流类ostream、文件流基类fstreambase和字符串流基类strstreambase,输入文件流类同时继承了输入流类和文件流基类(当然对于根基类是间接继承),输出文件流类ofstream同时继承了输出流类和文件流基类,输入字符串流类istrstream同时继承了输入流类和字符串流基类,输出字符串流类ostrstream同时继承了输出流类和字符串流基类,输入输出流类iostream同时继承了输入流类和输出流类,输入输出文件流类fstream同时继承了输入输出流类和文件流基类,输入输出字符串流类strstream同时继承了输入输出流类和字符串流基类。

“流”就是“流动”,是物质从一处向另一处流动的过程。C++流是指信息从外部输入设备(如键盘和磁盘)向计算机内部(即内存)输入和从内存向外部输出设备(如显示器和磁盘)输出的过程,这种输入输出过程被形象地比喻为“流”。为了实现信息的内外流动,C++系统定义了I/O类库,其中的每一个类都称作相应的流或流类,用以完成某一方面的功能。根据一个流类定义的对象也时常被称为流。如根据文件流类fstream定义的一个对象fio,可称作为fio流或fio文件流,用它可以同磁盘上一个文件相联系,实现对该文件的输入和输出,fio就等同于与之相联系的文件。

C++系统中的I/O类库,其所有类被包含在iostream.h,fstream.h和strstrea.h这三个系统头文件中,各头文件包含的类如下:

iostream.h包含有:ios, iostream, istream, ostream, iostream_withassign, istream_withassign, ostream_withassign等。

fstream.h包含有:fstream, ifstream, ofstream和fstreambase,以及iostream.h中的所有类。

Strstrea.h包含有:strstream, istrstream, ostrstream和strstreambase,以及iostream.h中的所有类。

在一个程序或一个编译单元(即一个程序文件)中当需要进行标准I/O操作时,则必须包含头文件iostream.h,当需要进行文件I/O操作时,则必须包含头文件fstream.h,同样,当需要进行串I/O操作时,则必须包含头文件strstrea.h。在一个程序或编译单元中包含一个头文件的命令格式为“#include<头文件名>”,当然若头文件是用户建立的,则头文件名的两侧不是使用尖括号,而是使用双引号。当系统编译一个C++文件对#include命令进行处理时,是把该命令中指定的文件中的全部内容嵌入到该命令的位置,然后再编译整个C++文件生成相应的目标代码文件。

C++不仅定义有现成的I/O类库供用户使用,而且还为用户进行标准I/O操作定义了四个类对象,它们分别是cin,cout,cerr和clog,其中cin为istream_withassign流类的对象,代表标准输入设备键盘,也称为cin流或标准输入流,后三个为ostream_withassign流类的对象,cout代表标准输出设备显示器,也称为cout流或标准输出流,cerr和clog含义相同,均代表错误信息输出设备显示器。因此当进行键盘输入时使用cin流,当进行显示器输出时使用cout流,当进行错误信息输出时使用cerr或clog。

在istream输入流类中定义有对右移操作符>>重载的一组公用成员函数,函数的具体声明格式为:

istream& operator>>(简单类型标识符&);

简单类型标识符可以为char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, float, double, long double, char*, signed char*, unsigned char*之中的任何一种,对于每一种类型都对应着一个右移操作符重载函数。由于右移操作符重载用于给变量输入数据的操作,所以又称为提取操作符,即从流中提取出数据赋给变量。

当系统执行cin>>x操作时,将根据实参x的类型调用相应的提取操作符重载函数,把x引用传送给对应的形参,接着从键盘的输入中读入一个值并赋给x(因形参是x的别名)后,返回cin流,以便继续使用提取操作符为下一个变量输入数据。

当从键盘上输入数据时,只有当输入完数据并按下回车键后,系统才把该行数据存入到键盘缓冲区,供cin流顺序读取给变量。还有,从键盘上输入的每个数据之间必须用空格或回车符分开,因为cin为一个变量读入数据时是以空格或回车符作为其结束标志的。

当cin>>x操作中的x为字符指针类型时,则要求从键盘的输入中读取一个字符串,并把它赋值给x所指向的存储空间中,若x没有事先指向一个允许写入信息的存储空间,则无法完成输入操作。另外从键盘上输入的字符串,其两边不能带有双引号定界符,若带有只作为双引号字符看待。对于输入的字符也是如此,不能带有单引号定界符。

在ostream输出流类中定义有对左移操作符<<重载的一组公用成员函数,函数的具体声明格式为:

ostream& operator<<(简单类型标识符);

简单类型标识符除了与在istream流类中声明右移操作符重载函数给出的所有简单类型标识符相同以外,还增加一个void* 类型,用于输出任何指针(但不能是字符指针,因为它将被作为字符串处理,即输出所指向存储空间中保存的一个字符串)的值。由于左移操作符重载用于向流中输出表达式的值,所以又称为插入操作符。如当输出流是cout时,则就把表达式的值插入到显示器上,即输出到显示器显示出来。

当系统执行cout<操作时,首先根据X值的类型调用相应的插入操作符重载函数,把X的值按值传送给对应的形参,接着执行函数体,把X的值(亦即形参的值)输出到显示器屏幕上,从当前屏幕光标位置起显示出来,然后返回COUT流,以便继续使用插入操作符输出下一个表达式的值。当使用插入操作符向一个流输出一个值后,再输出下一个值时将被紧接着放在上一个值的后面,所以为了让流中前后两个值分开,可以在输出一个值之后接着输出一个空格,或一个换行符,或其他所需要的字符或字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

天哪,flash cs4可以使动态文本旋转了

天哪&#xff0c;flash cs4可以使动态文本旋转了. 只要使用rotationZ属性即可。 这可是解决了一个跨世纪的问题&#xff0c;爽爽爽。 啊哈哈哈。 这是测试源代码。 var rTextField:TextFieldnewTextField();var textFormat:TextFormatnewTextFormat();rTextField.text"…

Java编译过程(传送门)

我不是要做一门编程语言&#xff0c;了解这个对我现在的工作也没什么帮助&#xff0c;纯粹好奇而已。 传送门转载于:https://www.cnblogs.com/flying607/p/10481239.html

Linux 系统如何调整时区和时间

比如我要吧机器调成太平洋时区&#xff0c;那么我可以输入以下的命令&#xff0c;我们创建一个Link文件来指明是Pacific Time&#xff1a; cd /etc/ rm –r localtime sudo ln -s /usr/share/zoneinfo/US/Pacific localtime 调节完时区之后&#xff0c;接下来就是设置时间&a…

C语言typedefine 和define的区别

define &#xff1a; 宏定义&#xff0c;在预编译阶段就进行处理&#xff0c;简单的字符串代换&#xff0c;typedefine&#xff1a; 编译时进行处理&#xff0c;不是简单的替换&#xff0c;而是对类型说明符的重新命名。被命名的标识符具有类型说明的功能&#xff0c;代码说明#…

博客园“图灵杯”第3届博问大赛比赛结果

经过近一个月的激烈角逐&#xff0c;博客园“图灵杯”第三届博问大赛已圆满结束。获奖园友分别是&#xff1a; 一等奖&#xff1a;邀月&#xff08;奖励图灵图书4本&#xff09; 二等奖&#xff1a;Kinglee、邢少&#xff08;奖励图灵图书2本&#xff09; 三等奖&#xff1a;Gr…

Objective-C优缺点

优点&#xff1a; 1&#xff1a;Category&#xff0c;使用category可以在不改变原来类的同时为类增加新的方法或者重写原来类的方法实现&#xff08;使用runtime方法还可以在分类中实现方法交换和添加属性操作&#xff09; 2&#xff1a;运行时 动态识别&#xff0c;动态添加方…

C++输入一个字符串,去掉这个字符串中出现次数最少的字符 例如: 输入:abcabbc 输出:bbb

统计字符的个数&#xff0c;记录出现最少的字符&#xff0c;然后再输出#include <iostream>using namespace std;int main() {char str[100];cin >> str;// 统计字符大小int count[256] {0};char *p str;while (*p ! \0){count[*p];p;}// 记录出现最少的字符 出现…

Jmeter测试监控 Summary Report界面

Jmeter测试监控 Summary Report界面 这几天使用了JMeter测试数据库在进行点查询时的读写性能&#xff0c;从网上找到了该篇文章用于备份。 所有数据写入一个文件&#xff1a;保存测试结果到本地。 文件名&#xff1a;指定保存结果。 仅日志错误&#xff1a;仅保存日志中报错…

我的LINUX学习之路之二十一之web服务器简单搭建

今天说说如何搭建HTTP服务器&#xff01; 目的&#xff1a; 使用“多IP地址”方法实现多个网站。 使用“主机头名”方法实现多个网站。 使用“多端口”方法实现多个网站。 这回用图形界面来&#xff0c;不用说&#xff0c;先来看安装软件&#xff01; System-Administation-添加…

公务员级别分类

公务员领导职务层次与级别的对应关系 (一)国家级正职&#xff1a;一级(二)国家级副职&#xff1a;四级至二级(三)省部级正职&#xff1a;八级至四级(四)省部级副职&#xff1a;十级至六级(五)厅局级正职&#xff1a;十三级至八级(六)厅局级副职&#xff1a;十五级至十级(七)县处…

iOS性能优化篇 —— 耗电优化总结

手机App耗电的主要来源有以下四个因素&#xff1a; CPU处理&#xff0c;Processing网络&#xff0c;Networking定位&#xff0c;Location图像&#xff0c;Graphics耗电优化最终目的&#xff1a;通过尽可能降低CPU、GPU功耗来降低手机电量消耗。 尽可能少用定时器&#xff1b;优…

Versant 对象型数据库

引用&#xff1a;http://www.versant.com.cn/vision.aspx 对象数据库&#xff0c;可能比传统数据库快几十倍&#xff0c;收费&#xff0c;等测试 在几十万的数据库&#xff0c;找任一两个数据关系&#xff0c;不用比较

找出一个数组中唯一一个出现2次的数字

找出一个数组中唯一一个出现2次的数字&#xff0c;不清楚是不是LeetCode上的题。本人默认是LeetCode上的题。 一个数组中有N个数字&#xff0c;但是只有一个数字出现了2次&#xff0c;其他的数字均不相同。这种问题一般应该采用hash方法实现。 让所有的数字都放到一个unorder…

c语言fgets函数的用法

fgets()函数用于从文件流中读取一行或指定个数的字符&#xff0c;其原型为&#xff1a;char * fgets(char * string, int size, FILE * stream);参数说明&#xff1a; string为一个字符数组&#xff0c;用来保存读取到的字符。 size为要读取的字符的个数。如果该行字符数大于si…

.Net 中的反射(查看基本类型信息) - Part.2

转自&#xff1a;http://www.cnblogs.com/JimmyZhang/archive/2008/02/17/1071372.html 反射概述 和Type类 1.反射的作用 简单来说&#xff0c;反射提供这样几个能力&#xff1a;1、查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata)&#xff1b;2、迟绑定(Late-Bin…

clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案

clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案&#xff1a;https://www.cnblogs.com/nanshanlaoyao/p/5964730.html height、clientHeight、scrollHeight、offsetHeight区别 &#xff1a;https://www.cnblogs.com/yi-mi-yangguang/p/6211305.html 转载于:h…

动手写了一个12306插件 chrome浏览器

2019独角兽企业重金招聘Python工程师标准>>> 小生是今年毕业来上海参加工作的一位很普通的java web程序员&#xff0c;后经人介绍转到SAP方向。 以前大学离家相对比较近&#xff0c;都是坐汽车回家的&#xff0c;平常都不是高峰期坐火车&#xff0c;使用12306倒是非…

行列存储方式比较

原文链接&#xff1a;https://blog.csdn.net/vagabond6/article/details/79555282 写入&#xff1a; 行存储的写入是一次完成&#xff0c;数据的完整性因此可以确定。 列存储需要把一行记录拆分成单列保存&#xff0c;写入次数明显比行存储多。 行存储在写入上占有很大的优势 …

c/c++整理--c++面向对象(1)

一、描述面向对象技术的基本概念面向对象是指按人们认识客观世界的系统思维方式&#xff0c;采用基于对象&#xff08;实体&#xff09;的概念建立模型&#xff0c;模拟客观世界分析、设计、实现软件的方法&#xff0c;包括类、对象、消息以及类的特性等方面的内容。类&#xf…

python环境问题(pycharm)

一、问题 我们在使用python的时候会遇到环境配置问题。如何可以一劳永逸&#xff0c;是我们解决问题的基本思想。 二、解决1.新建环境&#xff1a; 2.添加环境&#xff1a;选择需要的环境&#xff0c;可以是conda&#xff0c;亦可以是virtual。在将make available to all proje…