13.3输入和输出 ios的派生类 istream提供了创建输入流以及从流中提取数据 的手段;ios的派生类 ostream提供了创建输出流以及向流中 插入数据的手段;ios的派生类 iostream则同时提供了上述两 种手段。由于 iostream的主要作用是用来派生其它类的,在 格式化MO中通常不涉及该类。 对于格式化MO,类 istream和 ostream通过对运算符“>>” 和“<<”的多次重载,提供了对3大类13种数据类型的WO 操作。 字符型: signed char, unsigned char 字符串型: signed char*, unsigned char* 数值型: short, unsigned short,int, unsigned,long, unsign-ed long, float, double, long double
13.3 输入和输出 ios 的派生类 istream 提供了创建输入流以及从流中提取数据 的手段; ios 的派生类 ostream 提供了创建输出流以及向流中 插入数据的手段; ios 的派生类 iostream 则同时提供了上述两 种手段。由于 iostream 的主要作用是用来派生其它类的,在 格式化 I/O 中通常不涉及该类。 对于格式化 I/O,类 istream 和 ostream 通过对运算符 “>>” 和 “<<” 的多次重载,提供了对 3 大类 13 种数据类型的 I/O 操作。 字符型:signed char, unsigned char 字符串型:signed char*, unsigned char* 数值型:short, unsigned short, int, unsigned, long, unsign-ed long, float, double, long double
13.3.1格式化输入 格式化输入是指通过 istream的对象,利用重载了的“>>”运 算符来实现的。 最常用的格式化输入是对标准流cin的提取操作。在应用程序 中也可以定义用户自己的输入流类。但由于定义用户流时将涉 及到对流缓冲区 streambuf的操作,且实用价值不大,因此本 课程对此不作介绍。 格式化输入的缺省格式为:十进制(ios:dec)、跳过前导空 白字符(os:Ws)
13.3.1 格式化输入 格式化输入是指通过 istream 的对象,利用重载了的 “>>” 运 算符来实现的。 最常用的格式化输入是对标准流 cin 的提取操作。在应用程序 中也可以定义用户自己的输入流类。但由于定义用户流时将涉 及到对流缓冲区 streambuf 的操作,且实用价值不大,因此本 课程对此不作介绍。 格式化输入的缺省格式为:十进制(ios :: dec)、跳过前导空 白字符(ios :: ws)
13.32输入操作函数 int istream: geto istream& istream: get(signed char&) istream& istream get(unsigned char &) istream& istream: get(signed char*, int, char ="n) istream& istream: get(unsigned chark, int, char =n) 后4个成员函数所以返回对流 istream的引用,是为了便于进 “串联”输入。这实际上是流类成员函数重载的“标准” 形式。第一个函数的值为一整型数据,其目的是为了能够读取 文件结束标志EOF。该标志是C++语言预定义的一个宏: #define EOF
13.3.2 输入操作函数 int istream :: get(); istream& istream :: get(signed char&); istream& istream :: get(unsigned char&); istream& istream :: get(signed char*, int, char = '\n'); istream& istream :: get(unsigned char*, int, char = '\n'); 后 4 个成员函数所以返回对流 istream 的引用,是为了便于进 行 “串联” 输入。这实际上是流类成员函数重载的 “标准” 形式。第一个函数的值为一整型数据,其目的是为了能够读取 文件结束标志 EOF。该标志是 C++ 语言预定义的一个宏: #define EOF -1
include void maino char ch, str[81: cin. get(str, 81) cout >ch. cout < ch < endl
#include void main() { char ch, str[81]; cin.get(str, 81); cout > ch; cout << ch << endl; }
为了方便字符串的输入, istream中还说明了几个主要用于输 入字符串的非格式化成员函数: istream& istream: getline(signed char, int, char =n) istream& istream: getline(unsigned char, int, char='In) istream& istream ignore(int =1, int EOF) int istream. gcounto
为了方便字符串的输入,istream 中还说明了几个主要用于输 入字符串的非格式化成员函数: istream& istream :: getline(signed char*, int, char = '\n'); istream& istream :: getline(unsigned char*, int, char='\n'); istream& istream :: ignore(int = 1, int = EOF); int istream :: gcount();
#include void maino char ch, str[81] cingetline(str, 81); cout ch cout < ch < end:
#include void main() { char ch, str[81]; cin.getline(str, 81); cout > ch; cout << ch << endl; }
13.3.3格式化输出 格式化输出是通过 ostream类的对象,利用重载了的“<<”运 算符来实现的。 最常用的输出流对象为cout,有时,出于某种特殊需要也会用 到cer和cog。程序员也可以定义自己的输出流类,但实用 价值不大 格式化输出的缺省格式为:十进制、域宽为0、左对齐、空格 填充;精度为6位小数、浮点数
13.3.3 格式化输出 格式化输出是通过 ostream 类的对象,利用重载了的 “<<” 运 算符来实现的。 最常用的输出流对象为 cout,有时,出于某种特殊需要也会用 到 cerr 和 clog。程序员也可以定义自己的输出流类,但实用 价值不大。 格式化输出的缺省格式为:十进制、域宽为 0、左对齐、空格 填充;精度为 6 位小数、浮点数
1334输出操作函数 ostream& ostream: put(char) ∥输出单个字符 ostream& ostream: flush( ∥刷新输出流 例 #include void main( char ch=A while(ch <=Z put(ch ++ put(n);
13.3.4 输出操作函数 ostream& ostream :: put(char); // 输出单个字符 ostream& ostream :: flush(); // 刷新输出流 例: #include void main() { char ch = 'A'; while(ch <= 'Z') put(ch ++) put('\n'); }
13.3.5重载提取和插入运算符 friend istream& operator >>(istream&, cls&); friend ostream& operator <<(ostream&, cls&); 其中:cs为运算符重载所属类的类名。 从上述运算符重载的一般形式可以看出:提取和插入运算符必 须重载为类的友元函数,且函数的返回值必须是对相应类的引 用。至于参数,除了要求必须有一个流和一个类(说明运算符 重载的类)外,对其类型无严格要求。也就是说,可以是引用、 对象甚至指针。但习惯上常用引用,几乎从不使用指针
13.3.5 重载提取和插入运算符 friend istream& operator >> (istream&, cls&); friend ostream& operator << (ostream&, cls&); 其中:cls 为运算符重载所属类的类名。 从上述运算符重载的一般形式可以看出:提取和插入运算符必 须重载为类的友元函数,且函数的返回值必须是对相应类的引 用。至于参数,除了要求必须有一个流和一个类(说明运算符 重载的类)外,对其类型无严格要求。也就是说,可以是引用、 对象甚至指针。但习惯上常用引用,几乎从不使用指针
include class×{ int x public X(int a=0): X(a 1 int Get( return X; 3 void Set(int a) I x= a friend ostream& operator >(istream&, X&)
#include class X { int x; public: X(int a = 0) : x(a) {} int Get() { return x; } void Set(int a) { x = a; } friend ostream& operator > (istream&, X&); };