问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++的流中定义了哪些类?它们之间的关系如何?c++为用户定义了哪几个标准流

发布网友 发布时间:2022-04-26 04:52

我来回答

1个回答

热心网友 时间:2023-10-06 04:42

在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被形象地比喻为“流”。为了实现信息的内外流动,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流,以便继续使用插入操作符输出下一个表达式的值。当使用插入操作符向一个流输出一个值后,再输出下一个值时将被紧接着放在上一个值的后面,所以为了让流中前后两个值分开,可以在输出一个值之后接着输出一个空格,或一个换行符,或其他所需要的字符或字符串。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 创建三个类来描述多态 请教各位c++builder大侠 我定义了几个结构体 和一个类 怎么老是编译出现下列问题啊 Java的源代码中无论定义多少个类, 编译结果就只生成一个以.class为后缀的字节码文件对吗?内部内 java中在一个主类中,分别编译另外几个类,运行主类即可运行程序,代码怎么写呢? 我从一个Class中反编译后在Eclipse中重新编译却生成了多个class [新人求助]在一个java文件内定义多个类时无法运行。 Java编译成多个CLASS何解? 请编写应用程序,它由三个类定义组成,类名分别为A、B和Test java程序编写,定义三个类a,b,c.c类继承b类b类继承a类,c类中定义两个对象,一个带参数 编译一个定义了N个类和三个方法的 Java 源程序文件,总共会产生才N 个字节码文件,以“.class”为扩展名 一个包含三个类A、B、C的Java源程序A.java,编译后产生的类文件分别是 在一个java源文件中定义了3个类和15个方法,编译该java源文件时会产生 几 个 节码文件,其扩展名是什么? 如果一个Java Applet程序文件中定义有3个类…… 在一个合法的 Java 源程序文件中定义了 3 个类,其中属性为 public 的类可能有( )个。 解释下为什么 若Java程序中定义了三个类,编译后可生成几个字节码文件 书荒求书的 求好看的魔法斗气小说、要完结的,不要YY种马类型的,不要主角无敌类型的,最好是慢慢升级类型的。 魔兽RPG神武战纪,世界神器怎么获得? 魔兽RPG神武战纪东方金锭装备在哪可以找到? 寿险理赔人员述职报告 MyDemo.java文件中定义了两个类,分别是Person和Student,编译后将生成几个类文? 苏教版六年级下册语文第22课理想风筝 求“小学六年级语文教学工作实习计划”一篇,灰常感谢! 苏教版六年级下册的语文 苏教版六年级下册语文第十三课海洋,21世纪的希望.为什么说海洋会喜怒无常 六年级语文教学质量今后努力的目标与具体措施 苏教版六年级下册语文目录 苏教版小学六年级语文下册24课课文分段及段意 微信拍一下视频为什么重复视频仅自己可见? 请问这是什么树,它果实和花椒一样,叶子又不一样,有刺,尖叶,叶上也分叉,是什么树 微信视频动态为什么仅自己可见 office2010艺术字怎么制作|office2010艺术字制作方法 如何用office2010制作艺术字 office2010里这个艺术字要如何插入? 如何在word2010文档中插入艺术字 在微信视频那怎么解锁“仅自己可见”了还显示“已设为私密,无法转发”呀? 漫步者B7回音壁能当ktv音响吗 漫步者B7回音壁音箱用的什么功放 漫步者音响回音壁B3 漫步者回音壁安装位置,装前面还是后面。我只能装后面,行吗?