人民邮电出版3 第十九章郾++的%0系统
人民邮电出版社 第十九章 C++的I/O系统
人民邮电出版3 191C+的/O系统概述 192定义自己的插入操作符和提取操作符 193格式化ⅣO 194文本文件的JO 195二进制文件的/O Y8196文件的随机访问
人民邮电出版社 19.1 C++的I/O系统概述 19.2 定义自己的插入操作符和提取操作符 19.3 格式化 I/O 19.4 文本文件的I/O 19.5 二进制文件的I/O 19.6 文件的随机访问
人民邮电出版3 191C+的JO系统概述 1911流与文件 C和C++的ⅣO系统有一个重要的共同点,就 是它们都是在流上操作。这个共同点,使得在同一 个程序中,可以同时使用C和C++的JO操作 在C和C++的ⅣO系统中,流分为两类:文本 流和二进制流。文本流是一个字符序列。在文本流 中,可能发生字符转换。二进制流则是一组字节序 列。它与设备上的输入输出一一对应,没有进行任 何转换
人民邮电出版社 19.1 C++的I/O系统概述 19.1.1 流与文件 C和C++的I/O系统有一个重要的共同点,就 是它们都是在流上操作。这个共同点,使得在同一 个程序中,可以同时使用C和C++的I/O操作。 在C和C++的I/O系统中,流分为两类:文本 流和二进制流。文本流是一个字符序列。在文本流 中,可能发生字符转换。二进制流则是一组字节序 列。它与设备上的输入输出一一对应,没有进行任 何转换
人民邮电出版3 一个流与特定文件的联系,是通过“打开 ”操作建立起来的。文件一打开,程序就可以 同文件交换信息了。通过“关闭”操作,可以 将流与特定的文件之间的联系断开。当流的打 开是用于输出时,关闭操作将使相关缓冲区的 信息写到外部设备上。这个过程称为刷新流。 程序正常结束时,所有打开的文件都自动关闭
人民邮电出版社 一个流与特定文件的联系,是通过“打开 ”操作建立起来的。文件一打开,程序就可以 同文件交换信息了。通过“关闭”操作,可以 将流与特定的文件之间的联系断开。当流的打 开是用于输出时,关闭操作将使相关缓冲区的 信息写到外部设备上。这个过程称为刷新流。 程序正常结束时,所有打开的文件都自动关闭
人民邮电出版3 1912C++的流 C++流ⅣO是以类层次的方式实现的。基类是 一个流,它可以表示文件或O设备。它定义了使 用者看不见的低层操作。使用者接触的是由派生 类定义的高层次的ⅣO函数。 C+有四个预定义流,当C+程序开始执行 △时,它们会自动打开。这四个预定义流是 标准输入流cin; 标准输出流cout; 非缓冲型标准出错流cer 缓冲型标准出错流clog
人民邮电出版社 19.1.2 C++的流 C++流I/O是以类层次的方式实现的。基类是 一个流,它可以表示文件或I/O设备。它定义了使 用者看不见的低层操作。使用者接触的是由派生 类定义的高层次的I/O函数。 C++有四个预定义流,当C++程序开始执行 时,它们会自动打开。这四个预定义流是: 标准输入流cin; 标准输出流cout; 非缓冲型标准出错流cerr; 缓冲型标准出错流clog
人民邮电出版3 C++提供的流IO的一个明显优点,就是程 序员可以不考虑数据的类型。例如,输出变量a 的值 cout<<a 和输入变量b的值 cin<<b 这里变量和变量b的数据类型可能是int, char,foat等等
人民邮电出版社 C++提供的流I/O的一个明显优点,就是程 序员可以不考虑数据的类型。例如,输出变量a 的值 cout<<a; 和输入变量b的值 cin<<b; 这里变量a和变量b的数据类型可能是int, char, float等等
人民邮电出版 19,2定义自己的插入操作符和提取操作符 到目前为止,当需要输入或输出与类有关的数 据时,是通过建立专门的成员函数实现的。这种方 法不太方便。C++提供了更好的方法。这就是用重 载操作符“”来完成类的ⅣO操作。 1921创建插入符
人民邮电出版社 19.2 定义自己的插入操作符和提取操作符 到目前为止,当需要输入或输出与类有关的数 据时,是通过建立专门的成员函数实现的。这种方 法不太方便。C++提供了更好的方法。这就是用重 载操作符“>”来完成类的I/O操作。 19.2.1 创建插入符
人民邮电出版3 例191为下面的类 my data定义插入符 “<”,使其能输出该类的三个数据,f,c 类 my data的定义如下: class my data public int 1 float f char ch set val(int a, clot b, char ch) 1=a f=b ch=c
人民邮电出版社 例 19.2.1 为下面的类my_data定义插入符 “<<”,使其能输出该类的三个数据i, f, c。 类my_data的定义如下: class my_data { public : int i; float f; char ch; set_val(int a, cloat b, char ch) { i = a; f = b; ch = c; } };
人民邮电出版3 为创建类 my data的对象的插入符函数,其 功能为输出类 my data对象的三个数据;f,ch。可 重载“<<”操作符如下: ostream &operator<<(ostream &stream, my data obj) stream <<obj. 1<<"," stream << obj. f<< stream <x obj. ch<<"\nt return stream
人民邮电出版社 为创建类my_data 的对象的插入符函数,其 功能为输出类my_data对象的三个数据i,f,ch。可 重载“<<”操作符如下: ostream &operator<<(ostream &stream, my_data obj) { stream << obj.i << ","; stream << obj.f << ","; stream << obj.ch << "\n"; return stream; }
人民邮电出版3 这个函数的返回类型是一个对类 ostream的 对象的引用( ostream&)。它有两个参数:第一 个参数是对流的引用( ostream& estream);第二 个参数是出现在操作符“<”的右边的对象 ( my data obj)。 从上面这个具体的例子,可以写出如下的 插入符函数的一般框架: ostream& operator<<( ostream&函数的流类 人名对象名) ∥函数代码 return函数的流
人民邮电出版社 这个函数的返回类型是一个对类ostream的 对象的引用(ostream &)。它有两个参数:第一 个参数是对流的引用(ostream &stream);第二 个参数是出现在操作符“<<”的右边的对象 (my_data obj)。 从上面这个具体的例子,可以写出如下的 插入符函数的一般框架: ostream &operator << (ostream &函数的流,类 名&对象名) { // 函数代码 return 函数的流; }