140 likes | 323 Views
第十六章 输入/输出流. 课程 要求. 参考 书目. 课程 内容. 课程 练习. 课程内容. 输出流. 面向对象程序设计. 输入流. 课程要求. 参考书目. 返回首页. 16.2 输出流. 输出流 ostream 类提供主要的输出操作。可以通过三种方式来实现流的输出 : (1) 使用在 ostream 类中重载 “ << ” 插入运算符输出基本数据类型的数据,包括字符串和指针类型; (2) 使用 ostream 类的成员函数 put() 输出一个字符; (3) 使用 ostream 类的成员函数 write() 输出一串字符。
E N D
第十六章 输入/输出流 课程 要求 参考 书目 课程 内容 课程 练习
课程内容 输出流 面向对象程序设计 输入流 课程要求 参考书目 返回首页 面向对象程序设计
16.2 输出流 • 输出流ostream类提供主要的输出操作。可以通过三种方式来实现流的输出: • (1) 使用在ostream类中重载“<<”插入运算符输出基本数据类型的数据,包括字符串和指针类型; • (2) 使用ostream类的成员函数put()输出一个字符; • (3)使用ostream类的成员函数write()输出一串字符。 • 类ostream类的类定义如下: prev next back 面向对象程序设计
16.2 输出流 • 类ostream类的类定义如下: class ostream:virtual public ios{ public: ostream(streambuf *);//定义指向streambuf类对象的指针 ostream& flush(); //将输出流刷新 ostream& seekp(streampos);//移动文件的写指针pptr ostream& seekp(streamoff,ios::seek_dir); ostream& put(char);//向流对象中输出一个字符 stream& write(const signed char*,int);//向流对象中输出n个字符 ostream& write(const unsigned char*,int); streampos& tellp();//返回当前文件写指针pptr的位置 ostream& operator<<(short);//重载插入运算符“<<” ostream& operator<<(int); ostream& operator<<(char); ostream& operator<<(const char*);//针对字符串类型 ostream&operator<<(const void*);//针对指针类型 //…对系统中所有的基本数据类型给出了“<<”运算符的重载定义 }; prev next back 面向对象程序设计
16.2 输出流 • 16.2.1 使用预定义插入运算符输出 • 在ostream类中重载的插入运算符“<<”仍然是一个双目运算符,有两个操作数,左操作数为ostream类的对象,右操作数为一个系统预定义类型的对象,返回值为所用输出流对象的引用ostream&,目的是为了将几个插入运算符连在一起使用。多种不同的数据类型可以组合在一个语句中,编译时会根据插入运算符“<<”右操作数的数据类型来决定调用哪一个重载的插入运算符“<<”。 • 【例16.2】 prev next back 面向对象程序设计
16.2 输出流 • 16.2.2 使用成员函数put()输出字符 • 使用ostream类中的put()函数可以输出一个字符,参数可以为字符常量,也可以使用字符变量。由于put()函数的返回值是ostream类对象的引用,所以在一条语句中可以连续调用put()函数。 • 【例16.3】 • 16.2.3 使用成员函数write()输出一串字符 • 使用ostream类中的成员函数write()可以输出一串字符。write()函数有两个参数,第一个参数是待输出的字符串,第二个参数是输出字符串的字符个数。由于write()函数的返回值是ostream类对象的引用,所以在一条语句中可以连续调用write()函数。 • 【例16.4】 prev next back 面向对象程序设计
16.2 输出流 • 16.2.4 重载插入符输出新的数据类型 • 通过对插入符“<<”和提取符“>>”进行重载就可以支持新的数据类型的输入/输出。 • 【例16.5】 prev next back 面向对象程序设计
16.3 输入流 • 输入流istream类主要提供输入操作。可以通过三种方式来实现流的输入: • (1) 使用在istream类中重载“>>”提取运算符输入基本数据类型的数据; • (2) 使用istream类的成员函数get()或getline()输入字符序列; • (3) 使用istream类的成员函数read()输入一串字符; • istream类被定义在iostream.h文件中,它的类定义如下: prev next back 面向对象程序设计
16.3 输入流 class istream:virtual public ios{ public: istream(streambuf *); //定义指向streambuf类对象的指针 istream& get(signed char*,int,char=’\n’); istream& get(unsigned char*,int,char=’\n’); istream& get(streambuf&,char=’\n’); istream& get(signed char &);//从输入流中输入单个字符 istream& get(unsigned char &); int get(); //从输入流中输入下一个字符或EOF istream& getline(signed char*,int,char=’\n’); istream& getline(unsigned char*,int,char=’\n’); istream& read(signed char*,int); istream& read(unsigned char*,int); int peek(); //表示不输入并返回下一个字符 int gcount(); //用来返回上次输入的字符个数 istream& putback(char); prev next back 面向对象程序设计
16.3 输入流 istream& ignore(int=1,int=EOF); istream& seekg(streampos); //在输入流中移动文件指针 istream& seekg(streamoff,ios::seek_dir); streampos tellg(); //返回当前文件指针的位置 istream& operator>>(short); //重载提取运算符“>>” istream& operator>>(int); istream& operator>>(char); istream& operator>>(const char*); //针对字符串类型 istream&operator>>(const void*); //针对指针类型 //…对系统中所有的基本数据类型给出了“>>”运算符的重载定义 }; prev next back 面向对象程序设计
16.3 输入流 • 16.3.1 使用预定义提取运算符输入 • 运算符“>>”在istream类中被重载为一个输入符,也称提取运算符,流的输入就是用提取的方法来实现的。它也有两个操作数,在它左操作数为istream类或其派生类的一个对象,其右操作数可以是系统中所有基本数据类型。 • 【例16.6】 prev next back 面向对象程序设计
16.3 输入流 • 16.3.2 使用成员函数get()或getline()输入字符序列 • 使用istream类中的get()函数可以输入一个字符或一个字符串。 • (1) 不带参数的get()函数从指定的输入流中读取一个字符; • (2) 带一个字符型参数的get()成员函数自动读取输入流中的下一个字符; • (3) 带三个参数的get()成员函数的参数分别是接收字符的字符数组、字符数组的大小和分隔符(默认值为’\n’,可缺省)。 • 使用istream类中的getline()函数可以输入一行字符到字符数组中,然后插入一个空字符。 • 【例16.7】 prev next back 面向对象程序设计
16.3 输入流 • 16.3.3 使用成员函数read()输入一串字符 • istream类中的成员函数read()表示从输入流中输入一串指定数目的字符。 • read()函数有两个参数,第一个参数是输入字符的字符指针或字符数组,第二个参数是输入字符串的字符个数。 • 由于read()函数的返回值是istream类对象的引用,所以在一条语句中可以连续调用read()函数。 • 【例16.8】 prev next back 面向对象程序设计
16.3 输入流 • 16.3.4 重载提取符输入新的数据类型 • 为了能够支持新的数据类型的输入。通过对提取符“>>”进行重载就可以支持新的数据类型的输入。 • 【例16.9】 prev next back 面向对象程序设计