C++重新认知:流概念

0、跨年

马上就要跨年了,博主感叹时间流失过快,读者在看到这篇文章时会发出怎样的感叹呢?是与亲朋好友吃喝等跨年呢,还是像苦逼的博主一样不断学习希望未来多赚几俩碎银呢?又或者独守房间,像往常一样孤独度过呢…无论怎样希望读者能在下一年不断突破自己,过上想要的生活。
本篇文章是读者学习时从网上学到的内容,这里做了下内容排版整理。
ps:如果读完觉得受益,还请点赞,收藏,关注!

一、流的概念

C++流是指信息从外部输入设备(如键盘、鼠标、磁盘)向计算机内部(即内存)输入和从内存向外部输出设备(如显示器、内存)输出的过程,这种输入输出的过程被形象地比喻成了“流“。(数据就像河水一样从出发点流向了目的点)

二、C++的I/O类库(输入输出库)

2.1 输入输出库

1) iostream.h库

  • ios
  • iostream
  • istream
  • ostream
  • iostream_withassign
  • istream_withassign
  • ostream_withassign
  • …等等
    2) fstream.h
  • fstream
  • ifstream
  • ofstream
  • fstreambase
  • 包含iostream.h中所有类
    3) Strstrea.h
  • strstream
  • istrstream
  • ostrstream
  • strstreambase
  • 包含iostream.h中所有类

2.2 各个输入输出库中类的关系

1)ios为根基类,它直接派生四个类:输入流类istream、输入流类ostream、文件流基类fstreambase和字符串流类strstreambase 。
2)输入文件流类ifstream同时继承了输入流类和文件流基类。
3)输出文件流类ostream同时继承了输出流类和文件流基类。
4)输入字符串流类istrstream同时继承了输入流类和字符串流基类。
5)输出字符串流类ostrstream同时继承了输出流类和字符串流基类。
6)输入输出流类iostream同时继承了输入流类和输出流类.
7)输入输出文件流类fstream同时继承了输入输出流类和文件流基类.
8)输入输出字符串流类strstream同时继承了输入输出流类和字符串流基类。

三、I/O库的运用

1)在一个程序或一个编程单元(即一个程序文件)中需要进行标准I/O操作时,则必须包含头文件iostream.h
2)当需要进行文件I/O操作时,则必须包含文件fstream.h
3) 当需要进行串I/O操作时,则需要包含文件strstrea.h

四、标准I/O操作的四个类对象

分别是cin、cout、cerr、clog

cin: istream_withassign流类的对象,代表标准输入设备键盘。
cout: ostream_withassign流类的对象,代表标准输出设备显示器。
**cerr和clog含义相同:**均代表错误信息输出设备显示器。

五、输入输出系统执行过程

当系统执行cin>>x操作时:

1)首先根据实参x的类型调用相应的提取操作符重载函数,把x引用传送给对应的形参,接着从键盘的输入中读入一个值并赋给x后返回cin流。
2)从键盘上输入数据时,只有当输入完数据并按下回车键后,系统才把改行数据存入到键盘缓冲区,供cin流顺序读取缓冲区变量(每个数据间要空格或者回车键隔开,cin以这个为标准当结束符)。
3)当x为字符指针类型时:则要求从键盘的输入中读取一个字符串,并把它赋值给x所指向的存储空间中,若x没有事先指向一个允许写入信息的存储空间,则无法完成输入操作。

当系统执行cout<

首先根据x值的类型调用相应的插入操作符重载函数,把x的值按值传送给对应的形参,接着执行函数体,把x的值(亦即形参的值)输出到显示器屏幕上,从当前屏幕光标位置起显示出来,然后返回cout流,以便继续使用插入操作符输出下一个表达式的值。

六、ios类中的枚举变量和成员函数

1.ios类中的枚举常量
1)enum {skipws, left, right, internal, dec, oct, hex, showbase,
showpoint, uppercase, showpos, scientific, fixed, unitbuf, stdio
};
各枚举常量的含义如下:
- skipws
利用它设置对应标志后,从流中输入数据时跳过当前位置及后面的所有连续的空白字符,从第一个非空白字符起读数,否则不跳过空白字符。空格、制表符’/t’、回车符’/r’和换行符’/n’统称为空白符。缺省为设置。
- left, right, internal
left在指定的域宽内按左对齐输出,right按右对齐输出,而internal使数值的符号按左对齐、数值本身按右对齐输出。域宽内剩余的字符位置用填充符填充。缺省为right设置。在任一时刻只有一种有效。
- dec, oct, hex
设置dec对应标志后,使以后的数值按十进制输出,设置oct后按八进制输出,而设置hex后则按十六进制输出。缺省为dec设置。
- showbase
设置对应标志后使数值输出的前面加上"基指示符",八进制数的基指示符为数字0,十六进制数的基指示符为0x,十进制数没有基指示符。缺省为不设置,即在数值输出的前面不加基指示符。
- showpoint
强制输出的浮点数中带有小数点和小数尾部的无效数字0。缺省为不设置。
- uppercase
使输出的十六进制数和浮点数中使用的字母为大写。缺省为不设置。即输出的十六进制数和浮点数中使用的字母为小写。
- showpos
使输出的正数前带有正号"+"。缺省为不设置。即输出的正数前不带任何符号。
- scientific, fixed
进行scientific设置后使浮点数按科学表示法输出,进行fixed设置后使浮点数按定点表示法输出。只能任设其一。缺省时由系统根据输出的数值选用合适的表示输出。
2)在ios中定义的第二个枚举类型为:
enum open_mode {in, out, ate, app, trunc, nocreate, noreplace, binany};
其中的每个枚举常量规定一种文件打开的方式,在定义文件流对象和打开文件时使用。
3)在ios中定义的第三个枚举类型为:
- enum seek_dir {beg, cur, end};
其中的每个枚举常量用于对文件指针的定位操作上。
2.ios类中的成员函数
- int bad(); //操作出错时返回非0值。
- int eof(); //读取到流中最后的文件结束符时返回非0值。
- int fail(); //操作失败时返回非0值。
void clear(); //清除bad,eof和fail所对应的标志状态,使之恢复为正常状态值0,使good标志状态恢复为1。
- char fill(); //返回当前使用的填充字符。
- char fill(char c); //重新设置流中用于输出数据的填充字符为c的值,返回此前的填充字符。系统预设置填充字符为空格。
- long flags(); 返回当前用于I/O控制的格式状态字。
- long flags(long f); //重新设置格式状态字为f的值,返回此前的格式状态字。
- int good(); //操作正常时返回非0值,当操作出错、失败和读到文件结束符时均为不正常,则返回0。
- int precision(); //返回浮点数输出精度,即输出的有效数字的位数。
- int precision(int n); //设置浮点数的输出精度为n,返回此前的输出精度。系统预设置的输出精度为6,即输出的浮点数最多具有6位为有效数字。
- int rdstate(); //操作正常时返回0,否则返回非0值,它与good()正好相反。
- long setf(long f); //根据参数f设置相应的格式化标志,返回此前的设置。该参数f所对应的实参为无名枚举类型中的枚举常量(又称格式化常量),可以同时使用一个或多个常量,每两个常量之间要用按位或操作符连接。如当需要左对齐输出,并使数值中的字母大写时,则调用该函数的实参为ios::left | ios::uppercase。
- long unsetf(long f); //根据参数f清除相应的格式化标志,返回此前的设置。如要清除此前的左对齐输出设置,恢复缺省的右对齐输出设置,则调用该函数的实参为ios::left。
- int width(); //返回当前的输出域宽。若返回数值0则表明没有为刚才输出的数值设置输出域宽,输出域宽是指输出的值在流中所占有的字节数。
- int width(int w); //设置下一个数据值的输出域宽为w,返回为输出上一个数据值所规定的域宽,若无规定则返回0。注意:此设置不是一直有效,而只是对下一个输出数据有效。

你可能感兴趣的:(C++重新认知系列,c++,开发语言)