面向对象的程序设计:七、文件和流.ppt_第1页
面向对象的程序设计:七、文件和流.ppt_第2页
面向对象的程序设计:七、文件和流.ppt_第3页
面向对象的程序设计:七、文件和流.ppt_第4页
面向对象的程序设计:七、文件和流.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、面向对象的程序设计,第七章 文件和流,本章主要内容,流库 输入流和输出流 格式化输入输出 文件的输入输出,流 库,C语言中的输入输出函数只能识别系统预定义的类型。 C+通过流库来支持用户自定义类型(结构和类)的输入输出。 流是对从源到失的数据流的抽象,流与特定的设备相联系。 流库是用于输入输出的一组类。,流 库,ios类及其派生类为用户提供了使用流库的接口。,输入流和输出流,系统预定义类型的输入输出可直接使用运算符“”和“”来实现。 输出流 cout : 输出流ostream类的一个预定义对象 与标准输出设备(终端屏幕)相联系 ostream中重载了运算符(输出运算符) ostream /重载

2、形式:注意优先级和结合顺序,cout“string”;,注意:C编译器将根据对象类型选用相应版本的重载)运算符函数,用户不必关心。,输入流 cini; cin.operator(i); 输入运算符:跳过开始空白字符。 char ch; cinch; /输入“ x”,读入x,读入一个字符串时,空格作为串的终止。 char buffer20; cinbuffer; /输入“Jack Spart”,读入“Jack”,若类型不符,返回零值,并终止程序。 int readints( ) int v10; for(int i=0; ivi) continue; return i; ,输入:1 2 3 4

3、5. 6 7 8,用户自定义类型的输入输出,通过重载运算符“”和“”来实现。 class Complex double rpart, ipart; public: friend ostream,第一个参数是流,第二个参数是要输入输出的对象,返回流的引用,#include class Complex double rpart, ipart; public: Complex(double r=0.0, double i=0.0) ipart=i; part=r; friend ostream,istream ,重载的实质:分别输入/输出自定义类型的每个分量(系统预定义类型)。,格式化输入输出,C+

4、提供了两种格式控制方法: 使用ios类中定义的格式成员函数 通过对格式状态标志、字段宽度、填充字符和输出精度的操作来实现。 控制符和控制函数 可以直接插入到输入输出语句中。,格式化输入输出 ios类中定义的格式成员函数: class ios / public int width(int w); /设置字段宽度 int width( ) const; /返回设置字段的宽度 char fill(char); /设置填充字符 char fill( ) const; /返回设置的填充字符 long flags(long f); long flags( ) const; long setf(long s

5、etbits, long field); long setf(long); long unsetf(long); int precision(int); /设置浮点数精度 int precision( ) const; /返回设置的浮点数精度 / ;,格式函数的使用: 输入流:char buffer20; cin.width(20); cinbuffer;,输出流:cout.width(4); cout(12) ; cout.width(4); cout.fill(#); cout(12) ;,( 12),( #12),width( )作用于输入输出的数字或串,数据的长度超过width,忽略设

6、置,按数据实际长度显示; cout.width(4); cout(121212) ; 每次输出操作后,width被置为0; cout.width(4); cout.fill(#); cout(12“),(“ 12) ;,格式状态标志 ios中用枚举记录状态标志来控制I/O class ios public: enum skipws=0 x0001, /输入操作忽略空白字符 left=0 x0002, right=0 x0004, internal=0 x0008, /值按右对齐,符号按左对齐 dec=0 x0010, oct =0 x0020, hex=0 x0040, showbase=0

7、x0080, showpoint=0 x0100, /float,double显示小数和尾数后的零 uppercase=0 x0200, showpos=0 x0400, /在正整数前插入“+”号 scientific=0 x0800, /科学计数法,小数点前一位数字 / ; / ;,可用下列函数设置、读取、取消标志位; long flags( ) /返回当前格式化标志值 long flags(long f) /设置标志值f,并返回上次标志值 long setf(long f) /设置标志位f,并返回当前标志值 long unsetf(long f) /取消在f中设置的标志位,并返回当前标志值

8、,举例: void your_function( ) long old_options=cout.flags(ios:left | ios:oct | ios:showpoint); / cout.flags(old_options); ,cout.flags(cout.flags( ) | ios:showbase);,相抵触的标志不能同时设置,如:ios:dec和ios:oct,控制符 函数控制不方便,宽度控制符,预定义的控制符合控制函数有: hex dec oct指定基数,缺省是dec ws用于输入流,略去空白字符 endl换行 ends插入一个NULL(0)字符,结束一个字符串 flu

9、sh强制将流从缓冲区写入相应设备 setfill(char f)设置填充字符,缺省是空格 setprecision(int p)设置浮点数精度,缺省为6 .,int x=1, y=2; coutsetw(5)xsetw(4)y;,文件和流 处理文件的类在fstream.h中定义。 文件输入输出:1、创建流对象 2、使用流的成员函数打开文件,输出流对象my_file与文件hello.dat相联系,#include #lnclude void main( ) ofstream my_file; my_file.open(“hello.dat”, ios:out); / ,打开文件 C+中有三种类型

10、的文件流类: 输入文件类ifstream; 输出文件类ofstream; 输入 输出文件类fstream。,打开文件: void open(const char* name, int mod, int access=filebuf:openprot); mod为下列一些方式: ios:app附加方式写到流 ios:ate打开文件,并把文件指针移到文件尾 ios:in为读打开 ios:out为写打开 ios:trunc如文件存在,舍去文件内容 ios:nocreate文件不存在,则失败 ios:noreplace文件存在,则失败 access指明文件属性: 普通文件、只读文件、隐藏文件、系统文件

11、。,#lnclude void main( ) ofstream my_file; my_file.open(“hello.dat”); my_file“Hello world”endl; my_file.close( ); ,按文本方式读文件 直接使用输入输出运算符“”和“ void main( ) char string120, string220; ifstream my_file(“hello.dat”); my_filestring1; my_filestring2; coutstring1 string2endl; my_file.close( ); ,按二进制方式读/写文件 读写

12、的数据无含义,不用,而是get( )和put( ) istream ,读数据: #include void main( ) char my_char; int i=0; ifstream my_in_file(“hello.dat”); while(my_in_file) my_in_file.get(my_char ); coutmy_char; my_in_file.close( ); ,使用read( ) 和write( )函数 一次读写多个字符,其原型: istream ,使用文件指针 读指针用istream中的成员函数seekg( )来定位; 写指针用ostream中的成员函数seekp( )来定位。 其原型: istream seek_dir的三种取值: ios:beg /从文件头算起 ios:end /从文件尾算起 ios:cur /从文件指针的当前位置算起,读写指针在文件中位置,指出指针相对于何处,void main( ) ofstream my_file2(“file.dat”); strcpy(my_, “wang”

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论