- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章 输入输出流 C++语言程序中的输入和输出数据以字节流的形式存在。标准库中提供一组类模板用于数据的输入和输出,这些类模板的实例所生成的对象称为流对象。流对象关联输入或输出设备时,对流对象的操作就等于对流对象关联的输入或输出设备进行操作。各种流对象所属的类型都继承自同一个基类,因此,C++语言程序与各种输入或输出设备交换数据时,所采用的语法格式基本相同。 本章以自顶向下的顺序介绍流类库中提供的类模板,介绍类模板中用于输入输出操作的成员函数。最后介绍与输入输出流相关的迭代器。 知识体系 本章要点: 12.1 输入输出流的概述 12.2 ios_base中的状态标志 12.3 ios_base中的格式标志 12.4 利用操纵算子设置流的格式标志 12.5 basic_istream中主要的成员函数 12.6 basic_ostream中主要的成员函数 12.7 文件流 12.8 string流 12.9 流的iterator 12.1 输入输出流的概述 不论输入或输出的数据是什么类型,输入或输出的数据总以字节流的形式存在。字节流就是指字节的序列;输入设备(如键盘、磁盘等)中的数据流向内存,称为输入;内存中的数据流向输出设备(如显示器、磁盘等),称为输出。 C++语言标准库中有一族类模板专门负责数据的输入和输出,这些类模板以统一的方式来处理标准I/O、文件读/写等与数据流有关的操作。我们经常使用的cout和cin就是标准库中的流对象,它们的数据类型分别是ostream和istream。 那么,ostream和istream在关于流的“大家族”中到底处于什么位置呢?通过下图,我们来回答这个问题。 12.2 ios_base中的状态标志 类型ios_base中定义了4个状态标志称为ios::goodbit、ios::eofbit、ios::failbit、ios::badbit,它们都是枚举类型io_state的常量。 很奇怪这里都是ios::,而不是ios_base::。您可以认为类型ios_base继承自类型ios,或者ios_base就是ios。 程序12.1验证上面的论述。 1 //12.1 流的状态标志 2 #includeiostream 3 #includefstream 4 #includestring 5 using std::cin; 6 using std::cout; 7 using std::endl; 8 using std::ios; 9 using std::istream; 10 using std::ifstream; 11 using std::string; 13 void f(const istream in) 14 { coutin.good()=in.good()endl; 16 coutin.eof()=in.eof()endl; 17 coutin.fail()=in.fail()endl; 18 coutin.bad()=in.bad()endl; 19 coutin.rdstate()=in.rdstate()endl; 20 cout-----------------------------endl; 21 } 22 int main() 23 { 24 ifstream in(c:\\hello.txt); 25 f(in); 27 int a; 28 ina; 29 couta=aendl; 30 f(in); 32 in.clear(); 33 f(in); 35 string str; 36 instr; 37 coutstr=strendl; 38 f(in); 40 in.clear(ios::failbit|ios::badbit); 41 f(in); 43 in.setstate(ios::eofbit); 44 f(in); 46 return 0; 47 } 12.3 ios_base中的格式标志 与处理流状态的方法类似,类型ios_base中定义了很多格式标志用于控制流在输入或输出数据时的格式。它们中有的是单个使用的开关标志,例如,ios::skipws表示输入时是否跳过空格,有的则是几个构成一个域,在域内互斥,例如,ios::hex、ios::dec、ios::oct同属ios::basefield域,分别表示以16进制、10进制、8进制输入输出整数,它们在ios::basefield域中是互斥的,即同一时刻只能有一个被置。 表12.1列举了这些格式标志。
文档评论(0)