主题 | 概要 |
---|---|
C++基础 | C++的I/O部分概括、总结 |
编辑 | 时间 |
新建 | 20160826 |
序号 | 参考资料 |
1 | C++ Primer Plus |
2 |
相对与JAVA,C++的输入输出更加整洁,没有这么多装饰器,更加易于使用和理解。
流和缓冲区
C++程序把输入和输出看作字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插入到输出流中。流充当了程序和流源或流目标之间的桥梁。也使得程序使用相同的方式处理输入和输出,独立于具体的来源和去向。
管理输入包含两步:
将流与输入去向的程序关联起来;
将流与文件连接起来;
同样,管理输出包含两步:
将输出流连接到程序;
将输出目标与流关联;
流的抽像图如下:
通常,为了提高效率,在流的一端为引进一块缓冲区,作为信息从设备传输到程序或程序传输到设备时的临时存储工具。
C++ iostream文件中通过一系列的类来管理流和缓冲区,其中的一些类:
streambuf类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内存、刷新缓冲区和管理缓冲区内存的类方法;
ios_base 类表示流的一般特征,如是否可读取、 是二进制流还是文本流等;
ios 类 基于ios_base, 其中每括了一个指向streambuf对象的指针;
ostream类 是从ios类派生而來的,提供了输出方法;
istream类也是从ios类派生而來的,提供了输入方法;
iostream类是基于istream和ostream类的,因此继承了输入方法和输出方法;
要使用这些工具,必须使用适当的类对象,创建这样的对象(如count)将自动打开一个流,自动创建缓冲区,并将其与流关联起来。
C++中已经预定义了8个流对象(4 个用于窄字符流,4 个用于宽字符流),它们是:
cin 对象对应于标准输入流,这个流被关联到标准输入设备(键盘);
cout对象与标准输出流相对应,这个流被关联到标准输出设备(显示器);
cerr对象与标准错误流相对应,关联到标准输出设备,可用于显示错误消息,没被缓冲;
clog对象也对应着标准错误流,这个流被关联到标准输出设备,这个流被缓冲;
与此对应的是宽字符流的4个对象,wcin,wcout,wcerr,wclog。
Cout的使用
重载 << 运算符
<< 运算符的默认含义是按位左移运算符,但 ostream类重新定义了<<运算符,将其重载为输出,示作插入运算符,它能够识别出C++中所有的基本类型和字符串指针类型。
插入运算符的所有化身的返回类型都是ostream &,原型的格式如下:
ostream & operator « (type)
其中,type是要显示的数据的类型。返回类型 ostream &意味着使用该运算符将返回一个指向ostream 的对象。到底指向哪个对象呢?其实就指向调用该运算符的对象。