文档介绍:第九章
C++的I/O流库
引言
printf 和scanf的缺陷
编译器无法检查对它们调用的正确性,例:
它们只知道系统定义的类型的输入/输出,而c++中有大量的用户自己定义的类的对象
引言
文件的两个层次
文件可以看成是字节流,I/O流库是管理这些字节流的传送。
文件可以看成是各种类型的数据组成的序列,I/O流库是管理这两个层次之间的接口和这两个层次对外的接口。
I/O流库的功能。iostream库中定义了一组内在数据类型的操作
定义了输出流(ostream)和输入流(istream)两个类,cout、cerr、clog是ostream的对象,cin 是istream的对象。
<<是操作符:
ostream& operator << (ostream&, 类型);
>>是操作符:
istream& operator >> (istream&, 类型);
cin >>x:将数据从输入流中抽出移入x
>> (cin, x)
cout << x:将数据x插入输出流中。
>> (cout, x);
iostream是这两个类的派生类,它允许进行双向的I/O操作。
输出操作被认为是一个插入过程,数值被插入到输出流中。
输入操作被认为是一个抽出过程,数值是由输入流中抽出来的。
4个预先定义好的对象
cin: 标准输入
cout:标准输出
cerr:标准出错,不带缓冲区。
clog:标准出错,带缓冲区。
文件I/O操作
ifstream, ofstream, fstream
C++具有I/O流库的扩充机制。用户可以定义处理用户定义的类的操作。
输出
cout 输出系统预定义的各种类型:
int, int *, float, float *, char, char *, ……。
转义符:\n, \t
cout 的成员函数put。
put函数接收一个char型的常量或变量,返回一个ostream类的对象:
inline ostream& put(char);
ostream& put(unsigned char);
inline ostream& put(signed char);
(c).put(c)的意义是:
((c)).put(c);
cout 的成员函数write。
ostream& write(const char *,int);
inline ostream& write(const unsigned char *,int);
inline ostream& write(const signed char *,int);
write可以连续输出:
(…).write(…):
(r1, 8).write(r2, 9).write(r3, 10);
与下述的三行输出相同:
(r1, 8);
(r2, 9);
(r3, 10;