程序设计实习第十八讲输入输出流和文件操作.ppt
《程序设计实习第十八讲输入输出流和文件操作.ppt》由会员分享,可在线阅读,更多相关《程序设计实习第十八讲输入输出流和文件操作.ppt(64页珍藏版)》请在三一办公上搜索。
1、程序设计实习第十八讲 输入输出流和文件操作,主讲教师:田永鸿http:/,2,上节内容回顾,虚函数和多态纯虚函数和抽象类多态的实现:虚函数表虚函数的访问权限构造函数和析构函数中调用虚函数虚析构函数,3,课堂问题(1),判断对错并说明理由抽象基类中的所有virtual函数都必须声明为纯virtual函数;声明某个类为virtual,该类就成为抽象类。如果基类声明了一个纯virtual函数,派生类只有实现该函数才能成为具体类。下面的定义是否正确,该如何改正?class base string name()return basename;virtual void print(ostream,clas
2、s derived:public base void print()base:print(os);os“”mem;private:int meme;同时,基类及派生类也应该定义构造函数和析构函数。base:base(string name):basename(name);base:base();derived:derived(string name,int val):base(name),mem(val);derived:derived();,4,课堂问题(2),下列关于重载函数和虚函数的辨析描述中,理解不正确的是:重载函数处理的是同一类层次上的同名函数问题,而虚函数处理的是不同派生层次上的同
3、名函数问题。重载函数要求函数有相同的函数名称,不管返回值类型是否相同,但参数序列必须不同,而虚函数则要求函数名、参数序列和返回值类型完全相同。重载函数和虚函数都必须是类成员函数,但重载函数一般功能类似,而虚函数一般功能有所不同,甚至基类虚函数的函数体可以为空,具体功能在派生类中添加。重载函数在编译时,根据传递参数序列的不同,确定具体调用表现多态性,而虚函数在运行时,根据基类指针或引用所指向对象的不同,确定具体调用表现出多态性。,5,课堂问题(3),请写出运行时输出的结果 class A public:A()virtual void func()cout A:func endl;A()virtu
4、al void fund()cout A:fund endl;class B:public A public:B()func();void fun()func();B()fund();,class C:public B public:C()void func()cout C:func endl;C()fund();void fund()cout C:fund endl;main()C c;,A:funcC:fundA:fund,6,内容提要,输入输出流文件操作作业,7,输入输出流,流的概念模型C+中与流操作相关的类及其继承关系输入输出流对象:cin,cout,cerr,clog输出流输入流无格
5、式输入输出流操纵算子流格式状态,8,流的概念模型,流-可以看作一个无限长的二进制数字序列通过读写指针进行流的读和写(以字节为单位),将流上的数据读进变量x,将y的值写入流,y,x,9,流的概念模型,输出流 可以看作一端无限,另一端通过写指针不停地向后写入新内容的单向流,,写指针,10,流的概念模型,输入流 可以看作一端无限,另一端通过读指针不停地从流中读取新内容的单向流,读出的内容从流中删去。,读指针,11,有格式读写和无格式读写,有格式读写,以某种数据类型为单位读写例如:读一个整数,写一个浮点数等;无格式读写,以字节为单位读写,不区分其中的内容例如:读20个字节,写50个字节等;,12,缓冲
6、区刷新,向输出流中写数据时,通常是先向缓冲区中写,当缓冲区写满时,才真正向输出流写也可以通过函数在程序中主动将缓冲区内容写入输出流。,13,C+中与流操作相关的类及其继承关系,ios,istream,ostream,ifstream,iostream,ofstream,fstream,14,标准流对象,输入流对象cin 与标准输入设备相连输出流对象:cout 与标准输出设备相连 cerr 与标准错误输出设备相连,非缓冲输出 clog 与标准错误输出设备相连,缓冲输出,15,输出流,流插入运算符 cout“Good morning!n”;不刷新缓冲区 cout“Good”;不刷新缓冲区 cout
7、“morning!”;不刷新缓冲区 cout endl;刷新缓冲区 cout flush;刷新缓冲区cout显示内容的时候会先将欲显示内容存放在缓存区,待刷新的时候才将内容付显,而具有刷新功能的语句为endl或者flush。,16,输出流,输出表达式 cout(47+53);/将表达式括起来,/避免优先级冲突。连续使用流插入运算符 cout“ha ha”(100+100)endl;相当于(cout“ha ha”)(100+100)endl;,17,输出流,输出 char*类型的变量 char*string=“test”;cout(string);/输出 string的地址/0 x0042501
8、c-会变的!,用法:static_cast(a)将地址a转换成类型T,T和a必须是指针、引用、算术类型或枚举类型。表达式static_cast(a),a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。,18,输出流,用成员函数put输出字符 cout.put(A);put的连续使用 cout.put(A).put(a);,19,输入流,读取运算符 int x,y;cin x;cin y;或者 cin x y;,20,输入流,读取运算的返回值重载运算符的定义:istream while(cinx),21,输入流,成员函数 cin.get()读入一个字符(包括空
9、白字符),返回该字符;char*cin.get(char*buffer,int size,char delim=n)或者读size 1 个字符入buffer,或者遇到n;在buffer最后加0,分隔符留在输入流.char*cin.getline(char*buffer,int size,char delim=n)或者读size 1 个字符入buffer,或者遇到n;在buffer最后加0,分隔符从流去掉.bool cin.eof()返回输入是否结束标志.,22,输入流,cin.peek():返回下一个字符,但不从流中去掉.cin.putback(char ch):将字符ch放回输入流cin.g
10、count():返回上次读入的字节数cin.ignore(int nCount=1,int delim=EOF):从流中删掉最多nCount个字符,遇到EOF时结束。,23,无格式输入输出,用read,write 进行指定字节数的输入输出const int SIZE=80;char bufferSIZE;cin.read(buffer,20);/cin.get(buffer,20);cout.write(buffer,cin.gcount();/gcount返回上次读入的字节数cout endl;输入:Using the read,write and gcount member functio
11、ns 输出:Using the read,write,24,流操纵算子,整数流的基数:流操纵算子dec,oct,hex,setbase浮点数的精度(precision,setprecision)设置域宽(setw,width)用户自定义的流操纵算子,25,流操纵算子,整数流的基数:流操纵算子dec,oct,hex int n=10;cout n endl;cout hex n“n”dec n“n”oct n endl;输出结果:10 a 10 12,26,流操纵算子,浮点数的精度(precision,setprecision)precision是成员函数,其调用方式为:cin.precisio
12、n(5);setprecision 是流操作算子,其调用方式为:cin setprecision(5);/可以连续输出它们的功能相同。,27,流操纵算子,流格式操纵算子setioflags setiosflags(ios:fixed)用定点方式表示实数seiosflags(ios:scientific)用指数方式表示实数setiosflags(ios:fixed)与seiosflags(ios:scientific)都可以和setprecision(n)合用,其效果分别为:控制小数点右边的数字个数,控制指数表示法的小数位数。在用浮点表示的输出中,setprecision(n)表示有效位数。在用
13、定点表示的输出中,setprecision(n)表示小数位数。在用指数形式输出时,setprecision(n)表示小数位数。小数位数截短显示时,进行4舍5入处理。左右对齐输出可用setiosflags(ios:left)和setiosflags(ios:right)实现。强制显示小数点和符号可用setiosflags(ios:showpoint)和setiosflags(ios:showpos)实现。,28,流操纵算子,浮点数的精度(precision,setprecision)double x=12.3456789,y=12.34;cout setiosflags(ios:fixed)se
14、tprecision(6)x endl y endl;输出为:12.345679/小数点后有6位 12.340000,29,流操纵算子,浮点数的精度(precision,setprecision)double x=12.3456789,y=12.34;long z=1234567cout setprecision(6)x endl y endl z endl;输出为:12.3457/一共有6位 12.34/不到6位 1.23457e+006/科学计数法,30,流操纵算子,设置域宽(setw,width)两者功能相同,一个是成员函数,另一个是流操作算子,调用方式不同:cin setw(5);或者
15、 cin.width(5);cout setw(5);或者 cout.width(5);不含参数的width函数将输出当前域宽,31,流操纵算子,设置域宽(setw,width)例:int w=4;输入:1234567890 char string10;输出:1234 cin.width(5);5678 while(cin string)90 cout.width(w+);cout string endl;cin.width(5);输入操作提取字符串的最大宽度比定义的域宽小1,这是因为在输入的字符串后面必须加上一个空字符。,32,流操纵算子,设置域宽(setw,width)例:int w=4;
16、输入:happy new year char string10;输出?cin.width(5);while(cin string)cout.width(w+);cout string endl;cin.width(5);。,happ y new year,33,流操纵算子,设置域宽(setw,width)需要注意的是在每次读入和输出之前都要设置宽度。例如:char str10;输入:1234567890 cin.width(5);输出:1234 cin string;567890 cout string;cout string endl;,34,流操纵算子,设置域宽(setw,width)需要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 实习 第十八 输入输出 和文 操作

链接地址:https://www.31ppt.com/p-6004953.html