- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第八章输入输出流(inputoutputstream)的基本概念与原理
第八章 输入输出流(input/output stream)的基本概念及原理
8.1 预定义数据类型的输入/输出
8.1.1 基本情况及其优点
C++输入输出流的优点:
(一)重载运算符“”和“”能以函数重载的形式极大地扩大用途,在输入输出流中充分体现多态性。
C语言的输入/输出系统本来就灵活性大、功能比较完善。但它有一个较大缺点:无法处理众多的用户自定义数据类型(主要是类及其对象)。例如,有一个结构类型exampl如下:
struct exampl {
int j;
char str[80];
} str_ex;
如欲输出此结构对象str_ex的两个成员的内容,因而笼统地使用如下输出语句printf,
printf(“%exampl”,str_ex);
则将会出现编译错误。而C++的输出/输入系统则能很好地解决这个问题。
(二)类型安全(type-safe)
[例1]C语言输出语句中的类型错误(第一章已看过)
#include stdio.h
void main( )
{
int i=3;
double d=4.4;
printf(“%d\t%f\n”, i, d);
}
运行结果:
3 4.400000 对!
但如写错为:
printf(“%d\t%d\n”, i, d);
则编译时不出错,但运行结果错,为:
-26214
但在C++中只须写 couti“ ”dendl;而不必写出变量类型!就能得出
3 4.4,对!
始终不会出错!
(三)通过缓存增加功能。
(四)附带优点是书写方便以及显示中没有冗余字符,能自动略去浮点数尾数中的零(但如用户希望显示多余的零,也可以做到)。
C++的输入/输出系统是对流的操作,也即操作数据使其流向对象,或从对象流出。
什么是流?流是从源头到目的的数据流动。当键入字符时,字符从键盘流入程序中;当将数据写入磁盘文件中时,数据自程序流动至磁盘上。
C++输入/输出流库是使用继承方法建立起来的一个输入/输出类库,它具有两个平行的基类,即streambuf类和ios类。所有其它流类都是从它们直接或间接地派生出来的。
streambuf类用于提供物理设备的接口,它提供缓冲或处理流的通用方法。它作为一个虚基类,具有类层次如下:
streambuf
streambuf
filebufstrstreambufconbuf
filebuf
strstreambuf
conbuf
图 8.1
ios类及其派生类用于为用户提供使用流类的接口。它使用streambuf完成检查错误的格式化输入/输出操作,并支持对streambuf的缓冲区进行输入/输出时的格式化或非格式化转换。
ios类作为流库中的一个虚基类,派生出许多派生类,其主要层次如下:
i
i o s
fstreambaseistreamostream
fstreambase
istream
ostream
fstream
fstream
ostream-withassignistream-withassign
ostream-withassign
istream-withassign
iostream
iostream
i
iostream-withassign
图 8.2
8.1.2 预定义流(标准流)的基本原理
预定义输出输入流涉及较多的头文件有四个:ios.h,istream.h,ostream.h和iostream.h。下面分别介绍。
8.1.2.1 输出流的基本概念
流输出运算符“”是在头文件ostream.h的class ostream中定义的。从图8.2可以看出,class ostream是从class ios中派生出来的。因此下面先看一下用于定义class ios的头文件ios.h。
先看ios.h:
/***
*ios.h - definitions/declarations for the ios class.
***/
class ios {
public:
enum io_state { goodbit = 0x00,
eofbit = 0x01,
failbit = 0x02,
badbit = 0x04 };
enum open_mode { in = 0x01,
out = 0x02,
ate = 0x04,
app = 0x08,
您可能关注的文档
最近下载
- (高清版)DB15∕T 3765—2024 草地碳汇监测与核算技术规程.pdf VIP
- 施工员(市政)模拟考试题(附答案).doc VIP
- 化疗后骨髓抑制护理课件.pptx VIP
- 饲料企业从业人员法规考核试题300道带答案与解析!绝对验证过的!.pdf VIP
- 挫折与心理防御.ppt VIP
- 《离子反应第一课时》说课稿全国高中化学说课一等奖.docx VIP
- 市政工程毕业论文12篇.doc VIP
- 消防控制室值班人员培训PPT课件 消防控制室工作人员培训 消防控制室操作员培训材料.pptx VIP
- 教育科学研究方法课题研究报告.pptx VIP
- 教育科学研究规划课题研究报告.pptx VIP
文档评论(0)