c++ 面向对象程序设计教程

21
C++ 面面面面面面面面面面 面面面面 面面面

Upload: eytan

Post on 18-Mar-2016

80 views

Category:

Documents


3 download

DESCRIPTION

C++ 面向对象程序设计教程. 主讲教师;贾澎涛. 第七章 C++ 的 I/O 流类库. C++ 系统提供了一个用于输入输出( I/O )操作的类体系,这个类体系提供了对预定义类型进行输入输出操作的能力,程序员也可以利用这个类体系进行自定义类型的输入输出操作。. 7.1C++ 为何建立自己的输入输出系统. 输入输出系统的任务实际上就是以一种稳定的、可靠的方式在设备与内存之间传输数据 由于 C 语言的输入输出系统不支持用户自定义的对象,所以 C++ 系统建立一个可扩展的输入输出系统,它可以通过修改和扩展来加入用户自定义类型及相应操作。. 7.2C++ 的流及流类库. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: C++ 面向对象程序设计教程

C++ 面向对象程序设计教程主讲教师;贾澎涛

Page 2: C++ 面向对象程序设计教程

第七章 C++ 的 I/O 流类库C++ 系统提供了一个用于输入输出( I/O )操作的类体系,这个类体系提供了对预定义类型进行输入输出操作的能力,程序员也可以利用这个类体系进行自定义类型的输入输出操作。

Page 3: C++ 面向对象程序设计教程

7.1C++ 为何建立自己的输入输出系统 输入输出系统的任务实际上就是以一种稳定的、可靠的方式在设备与内存之间传输数据 由于 C 语言的输入输出系统不支持用户自定义的对象,所以 C++ 系统建立一个可扩展的输入输出系统,它可以通过修改和扩展来加入用户自定义类型及相应操作。

Page 4: C++ 面向对象程序设计教程

7.2C++ 的流及流类库7.2.1C++ 的流 流实际上就是一个字节序列。输入操作中,字节从输入设备(如键盘、磁盘、网络连接等)流向内存;输出操作中,字节从内存流向输出设备。流具有方向性

与输入设备相联系的流称为输入流与输出设备相联系的流称为输出流与输入输出设备相联系的流称为输入输出流

C++ 有 4 个预定义的流对象 , 它们是 :cin 标准输入 cout 标准输出cerr 标准出错信息输出 clog 带缓冲的标准出错信息输出

Page 5: C++ 面向对象程序设计教程

7.2.2 流类库 C++ 的流类库使用继承的方法建立起来的一个输入输出流类库,它具有两个平行的基类:

streambuf 类 ios 类

Page 6: C++ 面向对象程序设计教程
Page 7: C++ 面向对象程序设计教程

7.3 输入输出的格式控制 在 C++ 中,仍然可以使用 C 中的 printf() 和 scanf() 函数进行格式化。 使用 ios 类中有关格式控制的成员函数进行格式化 使用操纵符(流操纵算子)的特殊类型的函数进行格式化

Page 8: C++ 面向对象程序设计教程

7.3.1 用 ios 的成员函数进行格式化 ios 类中有几个成员函数可以用来对输入输出进行格式控制。进行格式控制主要是通过对格式状态字、域宽、填充字符以及输出精度的操作来完成的 状态标志字C++ 可以给每个流对象的输入输出进行格式控制,以满足用户对输入输出格式的需求。输入输出格式由一个 long int 类型的状态标志字确定。

Page 9: C++ 面向对象程序设计教程

skipws Skip white space on input. left Left-align values; pad on the right with the fill character. right Right-align values; pad on the left with the fill character (default alignment). internal Add fill characters after any leading sign or base indication, but before the value. dec Format numeric values as base 10 (decimal) (default radix). oct Format numeric values as base 8 (octal). ios::hex Format numeric values as base 16 (hexadecimal). ios::showbase Display numeric constants in a format that can be read by the C++ compiler.

Page 10: C++ 面向对象程序设计教程

showpoint Show decimal point and trailing zeros for floating-point values. uppercase Display uppercase A through F for hexadecimal values and E for scientific values. showpos Show plus signs (+) for positive values. scientific Display floating-point numbers in scientific format. fixed Display floating-point numbers in fixed format. unitbuf Cause ostream::osfx to flush the stream after each insertion. By default, cerr is unit buffered. stdio Cause ostream::osfx to flush stdout and stderr after each insertion.

Page 11: C++ 面向对象程序设计教程

ios 类中用于控制输入输出格式的成员函数 long ios:: setf(long flags); long ios:: unsetf(long flags); long ios::flags(); long ios::flags(long flags); int ios:: width() int ios:: width(int w) int ios::precision(int p); char ios:: fill(); char ios:: fill(char ch);

Page 12: C++ 面向对象程序设计教程

设置状态标志 设置状态标志,即是将某一状态标志位置“ 1” ,可使用 setf() 函数。 例 7.1

清除状态标志 清除状态标志,即是将某一状态标志位置“ 0” ,可使用 unsetf(long flags) 函数。

取状态标志 例 7.2

Page 13: C++ 面向对象程序设计教程

设置域宽 设置显示的精度 填充字符 例 7.3 、 7.4

Page 14: C++ 面向对象程序设计教程

7.3.2 使用流操纵算子进行输入输出格式控制 C++ 预定义的操纵符 操纵符的使用 例 7.5 用户自定义操纵符

Page 15: C++ 面向对象程序设计教程

C++ 预定义的操纵符 dec 以十进制形式输入或输出整型数,可用于输入或输出 hex 以十六进制形式输入或输出整型数,可用于输入或输出 oct 以八进制形式输入或输出整型数,可用于输入或输出 ws 用于在输入时跳过开头的空白符,仅用于输入 endl 插入一个换行符并刷新输入流,仅用于输出 ends 插入一个空字符,通常用来结束一个字符串,仅用于输出 flush 刷新一个输出流,仅用于输出

Page 16: C++ 面向对象程序设计教程

setbase(int n) 把转换基数设置为 n(n 的取值为 0 , 8 ,10 ,或 16) , n 的缺省值为 0 ,即以十进制形式输出 resetiosflags(long f) 关闭由参数 f指定的格式标志,可以用于输入或输出 setiosflags(long f) 设置由参数 f指定的格式标志,可以用于输入或输出 setfill(int c) 设置 c 为填充字符,缺省时为空格,可以用于输入或输出 setprecision(int n) 设置数据小数部分的位数 setw(int n) 设置域宽为 n ,可以用于输入或输出

Page 17: C++ 面向对象程序设计教程

操纵符的使用 例 7.5 例 7.6

Page 18: C++ 面向对象程序设计教程

用户自定义的操纵符 若为输出流定义操纵符函数,则定义形式如下:Ostream &manip_name(ostream &stream){ // 自定义代码return stream;} 若为输入流定义操纵符函数,则定义形式如下:istream &manip_name(istream &stream){ // 自定义代码return stream;}

Page 19: C++ 面向对象程序设计教程

7.4 用户自定义类型的输入输出对于用户自定义类型的输入输出,可以通过重载运算符“ <<” 和“ >>” 来实现。

Page 20: C++ 面向对象程序设计教程

7.4.1重载输出运算符“ <<”重载输出运算符“ <<” 函数的一般格式如下:ostream &operator<<(ostream &stream,class_name ob){

// 操作代码return stream;

} 例 7.9.1 date

Page 21: C++ 面向对象程序设计教程

7.4.2重载输入运算符“ >>”重载输入运算符“ >>” 函数的一般格式如下:istream &operator>>(istream &stream,class_name &ob){

// 操作代码return stream;

} 例 7.11 例 7.22