显示屏抖动-老毛桃u盘启动制作工具

includeiostream
2023年4月4日发(作者:securable)

C++

标准库之

iostream

库的学习笔记(一)

iostream

库的介绍和

istream,ostream

类以

及cin,cout对象

c语言的标准输入输出库是stdio.h是一个函数库而不是类库。

其中包括了我们最常使用的scanfprintf都是一些独立的全局函数,因为C语言是不支持类的。

c++的标准输入输出库iostream是一个类库,以类的形式组织,使用该库中的类要先引用命名空

间:usingnamespacestd;

最常使用的是cin和cout,这两个都是对象,cin是istream类的对象,cout是ostream类的对

象,而输入的cin>>与输出时的cout<<中的左移<<与右移>>分别是istream类与ostream类

的操作符重载。

iostream库里面创建了3个标准流对象:

1cin表示标准输入的istream对象,cin可以使我们从设备读取数据。

2cout表示标准输出的ostream对象,cout可以使我们向设备写入数据。

3cerr表示标准错误的ostream对象,cerr是导出程序错误消息的地方,只能向屏幕设备写数据。

标准的流对象都有默认的设备:

cout<

cin>>data;cin默认的设备是键盘缓冲区。

iostream库由以下几个库组成:fstream,iomainip,ios,iosfwd,iostream,istream,ostream,

sstream,streambuf,strstream。

istream用来访问操作系统的输入流,ostream访问操作系统的输出流,iostream同时继承了这两

个类。

在ostream类中,重载了许多的左移<<操作符,对每种基本数据类型都做了重载,比如

&ostreamoperator<<(ostream&temp,intsource);

&ostreamoperator<<(ostream&temp,charsource);

&ostreamoperator<<(ostream&temp,char*source);

由于以上重载返回的数据类型都是ostream的引用,ostream又可以作为左值,所以可以实现

cout<<"abc"<

同样在istream类中,也重载了许多右移>>操作符,对每种基本数据类型都做了重载,比如

&istreamoperator>>(istream&temp,intsource);

&istreamoperator>>(istream&temp,charsource);

以上是终端标准输入输出设备的输入输出,也就是一般pc机的键盘和显示器的输入输出。

C++标准库之iostream库的学习笔记(二)fstream库以及ofstream类的使用

iostream库不仅支持终端设备的输入输出,还支持文件的输入输出,和文件有关的输入输出类声明

在fstream头文件中,有三个类负责文件的输入输出

1)ifstream类:从istream类派生。

2)ofstream类:从ostream类派生。

3)fstream类:从iostream类派生。

由于文件的输入输出和键盘鼠标的输入输出是不一样的,一般pc机只有一个键盘设备,所以

iostream库内部声明了一个istream类的对象cin,这个对象负责从键盘获取数据,而文件设备在

系统中是由许多的,所以iostream库内部无法给你为机器的每个文件都创建一个负责获取数据的

ifstream对象和负责写入数据的ofstream对象,所以我们要针对一个文件进行读取或写入数据的

时候都要自己创建一个ifstream或ostream类的对象来用。

ofstream类的默认构造函数如下:

ofstream::ofstream(constchar*filename,intmode=ios::out,intopenport=

filebuf::openport);

filename是要打开的文件名,

mode是打开的方式,

openport是打开文件的属性。

mode可以设置的方式如下:

ios::app以追加的方式打开

ios::ate文件打开后定位到文件尾

ios::binary以二进制方式打开文件,默认是以文本方式打开

ios::in文件以读(输入)方式打开

ios::out文件以写(输出)方式打开

ios::trunc如果文件存在,则把文件清空。

以上属性用“|”(按位或)连接起来。

openprot属性如下:

0普通文件

1只读文件

2隐含文件

4系统文件

以上属性可以用加或者按位或方式组织起来,比如1|2和3都代表既是只读又是隐含文件。

在windows操作系统中可以不要第三个参数,如果加入第三个参数,那第三个参数是打开文件的共

享方式,也就是打开这个文件时,其他进程是否可以读写该文件。

共享方式参数可以是下面的值:

0x10//_SH_DENYRWDeniesreadandwriteaccessto

thefile

0x20//_SH_DENYWRDenieswriteaccesstothefile

0x30//_SH_DENYRDDeniesreadaccesstothefile.

0x40//_SH_DENYNOPermitsreadandwriteaccess

其他值都会报"Invalidsharingflag"的错误。

ofstreamhFile("c:",ios::out,_SH_DENYRW);//_SH_DENYRWisdeny

readandwrite

if(!hFile)//ifthefilecouldopen,hFileisahandle,elseiszero

{

cout<<"writefail!"<

cout<<"accessisdenies,maybethefileisreadonlys,orusedenyread

openedofotherprocess."<

}

else

{

hFile<<"bycoderleewrites";

cout<<"writesuccess!"<

}

();//openedfileneedclose.

上面是写文件的事例代码,先打开文件,然后判断是不是0,如果是0,则提示writefail否则写文件,

提示writesuccess.

C++标准库之iostream库的学习笔记(三)ifstream类的使用和介绍

该继续看ifstream类了。

ifstream继承自istream类,istream类只有一个iostream库中创建好的cin对象,对应一个输

入设备就是pc机的键盘,而ifstream类则没有在fstream中有创建好的对象,原因上一篇文章已

经说了。

ifstream是文件输入类,输入的源是文件,目标是内存,从文件向内存输入,也就是读取文件的意

思了。

如果想读取一个文件,简单的示例代码如下:

#include

#include

#include

usingnamespacestd;

int_tmain(intargc,_TCHAR*argv[])

{

ifstreamhFileRead("c:",ios::in,_SH_DENYRW);//deniesreadandwrite

if(!hFileRead)

{

cout<<"readfail!"<

exit(1);

}

charch;

stringcontent;

while((ch))//thegetmethodretuanfalseonreadend

{

content+=ch;//stringsupportoprator+=,useoverload

(ch);

}

system("pause");//otherprocesscan'treadorwritethefile

();

system("pause");

return0;

}

get方法会读取一个字符,当读到文件末尾就会返回false。

并且示例了_SH_DENYRW的共享方式打开文件的后果,在第一个暂停处无法打开c:,当调

用close才可以正常打开。

主要工作函数:

get

getline

read

另外有几个辅助函数:

peek

putback

ignore

gcount

seekg

seekdir

tellg

实际开发过程中使用std::getline这个全局函数来获取一行字符,使用如下:

#include

#include

#include

usingnamespacestd;

int_tmain(intargc,_TCHAR*argv[])

{

fstreamhFile;

("c:",ios::out|ios::in,_SH_DENYWR);//onlydenywrite

stringstr;

while(std::getline(hFile,str))

cout<

();

();

return0;

}

C++标准库之iostream库的学习笔记(四)fstream类的使用和总结文件IO

fstream类可以读也可以写,继承了ifstream和ofstream两个类的功能。

在做文件I/O的时候,一般的操作也就是

1打开文件:输出out,输入in,打开时清空trunc,追加方式app

2读取字符,读取行:getch,getline

3写入字符,写入行:put,oprator<<

4判断是否是文件末尾:eof()

5将文件缓冲区内容更新到文件:flush()

6文件流读指针的获取和设置:tellg()seekg()

7文件流写指针的获取和设置:tellp()seekp()

ifstream只支持tellgseekgg->get

ofstream支持tellpseekpp->put

fstream两个都支持,而且是联动的,移动读指针,写指针随之移动,移动写指针,读指针也会随之

移动。

还有就是假若当前文件流的状态是eof,再移动读指针seekg(),将不起作用,必须先调用clear清

除eof状态,才能使用seekg移动写指针。

还有std命名空间有一个全局函数getline可以支持读入到std::string,而不用再使用

e(char*,ncount)然后将char*转换为string。

就这些iostream还有许多需要注意的地方与陷阱,先挖掘到这里,继续学习下一章,不能无限的深

入在一个知识点去钻牛角间,会用即可,以后遇到特殊需要再回过头来深入学习。

更多推荐

includeiostream