IO流

来源:互联网 发布:手机linux模拟器 编辑:程序博客网 时间:2024/05/17 07:03
流实际上是一个字节序列(字节流),C++的输入输出是以字节流的形式出现的;

istream 输入流(键盘输入), 从输入流中获取数据。 cin是istream的对象;
ostream 输出流(键盘输出到屏幕)           cout是ostream的对象;

ifstream 输入流   向内存中写数据

ofstream    向文件中写数据   输出到文件

fstream  文件输入输出流
linux所有的东西都是文件 包括显卡

traits隔离因类型的不同
缓冲区 类似于字符数组, 是内存的一块缓冲区;
IO代价是比较高的,尽量减少他的代价的次数


cerr是没有缓冲
缓冲区刷新 是 就是给缓冲区清空掉;强制输出;

UTF8就是个单字节字符集编码;
一个汉字对应的是三个字节
微软下输出字符; 一个汉字固定对应的是两个字节

第三层是做格式化和非格式化的IO操作;
<<是函数做啦重载   称为格式化输出;
格式化输出就是以占几个字节输出;


给类做一个友元;

cout<<e1<<'\n'; 翻译成下面的;
opeator<<(cout,e1);

做成friend 是因为需要访问他的私有成员;
只要不涉及到修改 ,就定义成const
因为我们的const和非函数都是可以用的

endl是清空缓冲 加换行;
hex是十六进制;
流的操控符
cin>>hex>>n; //格式化输入,

默认的话是会跳过前导空格字符;
流的状态
eof 是文件最后有一个结束符;
当eof 碰到文件末尾,也会检查 状态自动变成fail
输入和输出操作;
格式化或者非格式化输出输入

第二层是管理流状态的;
以状态为依据;
cin.get(buf,sizeof buf,';');
不丢弃是左
string s;
cin>>s;
cin.get() 是默认是以换行符为结尾的;

cin.ignore(3,',');
输入文件

放回到输入缓冲区;
string s;
getline(cin ,s);//

ios_base 是流的格式化输出

里面存放的是流的格式化状态;

里面存放的是前置操作;
他只会影响;
操控符;

常用的格式设置;
精度为3就是小数点后面为三位;
显示基数;

数据有符号的话进行内部填充;
width 宽度的操作只能影响后面的一次;
操控符;是如何适应格式化输入输出的;

第一层次 是设置流的格式化样式
第二层次 是检查流的状态 看这个流是好的还是坏的;
第三层次 做格式化和非格式化的IO操作;

setw(12),setfill() 这shi

函数指针作为参数,就是作为回调用的;
cout.operator<<(hex);
左操作符;

有参数的操控符
无参数的操控符   左操作符重载函数() hex作为一个函数指针传进左操作符重载函数()中当参数,然后这个函数指针调用cout.set()相关的函数;
有参数的操控符  首先的有参数的本身是个函数,这个函数创建并返回一个setw  类型; 然后通过另外一个左操作符重载函数()来进行调用cout.set() 函数;

char c;
while(fin.get(c))
 fout.put(c);   文件拷贝

fout<<fin.rdbuf();
一个流同一时间只能给一个文件用;

从卡

fout<<

0 0