好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C++程序设计--对象分册(第4章).ppt

54页
  • 卖家[上传人]:枫**
  • 文档编号:589379661
  • 上传时间:2024-09-10
  • 文档格式:PPT
  • 文档大小:205.50KB
  • / 54 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第第4章章 输入/输出流输入/输出流 n本章学习重点掌握内容:本章学习重点掌握内容:n输入/输出流类体系结构输入/输出流类体系结构 n输入/输出流的格式化输入/输出流的格式化n输入/输出流对象输入/输出流对象n文本文件和二进制文件的输入和输出文本文件和二进制文件的输入和输出n综合应用实例综合应用实例9/10/20241 第第4章章 输入/输出流输入/输出流 n4.1 输入/输出流基本概念输入/输出流基本概念 n4.2 输入/输出流类体系输入/输出流类体系 n4.3 I/O流操作流操作 n4.4 文件流和文件的输入/输出文件流和文件的输入/输出 n4.5 字符串流字符串流 n4.6 重载插入和提取运算符重载插入和提取运算符9/10/20242 4.1 输入/输出流基本概念输入/输出流基本概念 1、、流流 流是一种抽象,它负责在数据的流是一种抽象,它负责在数据的生产者生产者(程序(程序/文件)和数据的文件)和数据的消费者消费者(文件(文件/程序)之间建程序)之间建立联系,并管理数据的流动立联系,并管理数据的流动 2、字节流、字节流 字节流分为字符流(也称文本流)和二进制流。

      字节流分为字符流(也称文本流)和二进制流字符流在数据传输时需作转换,效率较低但字符流在数据传输时需作转换,效率较低但可以直接编辑,显示或打印可以直接编辑,显示或打印 9/10/20243 4.1 输入/输出流基本概念输入/输出流基本概念 二进制流将字节流的每个字节以二进制二进制流将字节流的每个字节以二进制方式解释,它在数据传输时不作任何转方式解释,它在数据传输时不作任何转换,故效率高但无法人工阅读,可移换,故效率高但无法人工阅读,可移植性较差植性较差3、、 文件文件 文件是一般指存储在外部介质上数据的集合文件是一般指存储在外部介质上数据的集合计算机中的程序、数据、文档通常都组织成文计算机中的程序、数据、文档通常都组织成文件存放在外存储器中件存放在外存储器中 9/10/20244 4.1 输入/输出流基本概念输入/输出流基本概念4、缓冲、缓冲 系统在主存中开辟的、用来临时存放输入输出系统在主存中开辟的、用来临时存放输入输出数据的区域,成为输入输出缓冲区(简称缓冲数据的区域,成为输入输出缓冲区(简称缓冲区)5、命名空间、命名空间 命名空间,就是在程序的不同的模块中使用相命名空间,就是在程序的不同的模块中使用相同的名字表示不同的事物(实体)。

      目的是提同的名字表示不同的事物(实体)目的是提供一种机制,使大程序的各个部分中因出现重供一种机制,使大程序的各个部分中因出现重名而导致冲突的可能性降到最低名而导致冲突的可能性降到最低 9/10/20245 4.2 输入/输出流类体系输入/输出流类体系 C++为实现数据的输入和输出定义为实现数据的输入和输出定义了一个庞大的流类库,它包括的类主要了一个庞大的流类库,它包括的类主要有有ios,,istream,,ostream,,iostream,,ifstream,,ofstream,,fstream等类istream和和ostream是是类类ios的公有派生类,分别提供输入和输的公有派生类,分别提供输入和输出操作继承关系见下图继承关系见下图 9/10/20246 4.2.1 流类库流类库 9/10/20247 4.2.1 流类库流类库 C++I/O常用流类列表(常用流类列表(1)) 9/10/20248 4.2.1 流类库流类库C++I/O常用流类列表常用流类列表 (2)9/10/20249 4.2.2 标准流对象标准流对象 C++ 语言在头文件语言在头文件 iostream.h 中预定义了中预定义了 4个标个标准流类的对象:准流类的对象:n extern istream cin;/ 标准输入流对象标准输入流对象n extern ostreamcout; // 标准输出流对象标准输出流对象n extern ostreamcerr; // 标准错误流(非缓标准错误流(非缓冲)对象冲)对象n extern ostreamclog; // 标准错误流对象标准错误流对象9/10/202410 4.2.2 标准流对象标准流对象ncin 是是console input缩写。

      在默认的情况下,代表键缩写在默认的情况下,代表键盘ncout 是是console output的缩写在默认的情况下,的缩写在默认的情况下,代表显示器代表显示器ncerr和和clog 是是 console error和和console log的缩写在默认的情况下,代表显示器这四个标准流中,在默认的情况下,代表显示器这四个标准流中,cerr为非缓冲流,其余均为缓冲流为非缓冲流,其余均为缓冲流n输入就是从流中提取一个字节序列,输入就是从流中提取一个字节序列,C++用用“>>”运运算符表示提取,称为提取运算符输出就是向流中插算符表示提取,称为提取运算符输出就是向流中插入一个字节序列,用入一个字节序列,用“<<”运算符表示插入,称为插运算符表示插入,称为插入运算符这两个运算符分别定义在类入运算符这两个运算符分别定义在类ostream和和istream中 9/10/202411 4.2.2 标准流对象标准流对象【【例例4.1】】使用流使用流cout和和cerr实现数据的输出实现数据的输出includevoid main(void){ float a,b; cerr< <”输入输入a和和b的值:的值:\n”; cin>>a>>b; if (b!=0) cout<

      流的格式化iomanip.h中预定义的格式控制符中预定义的格式控制符9/10/202413 4.3 I/O流操作流操作n控制输出格式的流成员函数控制输出格式的流成员函数 9/10/202414 4.3 I/O流操作流操作n设置格式状态的格式标志设置格式状态的格式标志 9/10/202415 4.3 I/O流操作流操作【【例例4.2】】用格式控制符用格式控制符setw、、hex、、dec指定输出数据指定输出数据的域宽和数制的域宽和数制include#includevoid main(void){ int a=256,b=128;cout < //因因iomanip.h中包含有中包含有iostream.h,,所以该命令也可省略所以该命令也可省略 #include void main() { int x=30, y=300, z=1024; cout<

      项分别指定宽度include #includeusing namespace std;void main(){ double values[]={1.23,35.36,653.7,4258.24}; char*names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++) out<#includeusing namespace std;void main(){ double values[]={1.23,35.36,653.7,4258.24}; char*names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++) { cout.width(10); cout.fill('*'); cout<

      控制数据输出精度include#includeusing namespace std;void main(){ double values[]={1.23,35.36,653.7,4358.24}; char*names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++)cout<void main(void){ int i,s; char t[80]; cout<<"输入一个整数:输入一个整数:"; cin>>i; s=cin.rdstate();cout<<"s="<>i; s=cin.rdstate(); } cout<<"num="<

      函数put函数把一个字符写到输入函数把一个字符写到输入流中n Get()函数非格式化函数的功能与提取()函数非格式化函数的功能与提取运算符运算符“>>”很相像很相像 get函数在读入数据函数在读入数据时包括空白字符时包括空白字符 nGetline()函数getline成员函数的功能成员函数的功能是允许从输入流中读取多个字符,并且允许是允许从输入流中读取多个字符,并且允许指定输入终止字符(默认值是换行字符),指定输入终止字符(默认值是换行字符),在读取完成后,从读取的内容中删除该终止在读取完成后,从读取的内容中删除该终止字符 9/10/202424 4.3.2 用流成员函数实现输入/输出用流成员函数实现输入/输出【【例例4.8】】put函数应用举例,有一个字符串函数应用举例,有一个字符串“ENGLISH”,要求按反序输出要求按反序输出include void main(){ char *p="ENGLISH"; for (int i=6;i>=0;i--) cout.put(*(p+i)); cout.put('\n');}运行结果:运行结果:HSILGNE。

      9/10/202425 4.3.2 用流成员函数实现输入/输出用流成员函数实现输入/输出【【例例4.9】】get函数应用举例,从键盘接收字符并输出函数应用举例,从键盘接收字符并输出includevoid main(){ char ch; while((ch=cin.get())!=EOF) cout.put(ch);}运行时输入:运行时输入:Abc xyz 123↙ ↙则输出结果:则输出结果:Abc xyz 1239/10/202426 4.3.2 用流成员函数实现输入/输出用流成员函数实现输入/输出【【例例4.10】】getline函数应用举例,为输入流指定一个终止字符函数应用举例,为输入流指定一个终止字符本程序连续读入一串字符,直到遇到字符本程序连续读入一串字符,直到遇到字符“t”时停止,字符个数时停止,字符个数最多不超过最多不超过80个includevoid main(){ char line[100]; cout<<"Type a line terminated by 't' "<

      ↙ ↙输出结果:输出结果:abcdefg hhh9/10/202427 4.4 文件流和文件的输入/输出文件流和文件的输入/输出 使用一个文件流,应遵循以下步骤:使用一个文件流,应遵循以下步骤:n 打开一个文件其目的是将一个文件流对象打开一个文件其目的是将一个文件流对象与某个磁盘文件联系起来与某个磁盘文件联系起来n 使用文件流对象的成员函数,将数据写入到使用文件流对象的成员函数,将数据写入到文件中或从文件中读取数据文件中或从文件中读取数据n 关闭已打开的文件,即将文件流对象与磁盘关闭已打开的文件,即将文件流对象与磁盘文件脱离联系文件脱离联系9/10/202428 4.4 文件流和文件的输入/输出文件流和文件的输入/输出n定义一个文件对象例如:定义一个文件对象例如: ifstream infile; // 定义输入文件流对象定义输入文件流对象outfile ifstream infile((“filel.txt”)); ofstream outfile; fstream iofile; n 用文件流对象的成员函数用文件流对象的成员函数open()或构造函数,打开一或构造函数,打开一个文件。

      例如:个文件例如: outfile.open(“file2.txt”);n 用提取、插入运算或成员函数对文件读写例如:用提取、插入运算或成员函数对文件读写例如:infile>>ch;n用完文件后,使用文件流对象的成员函数关闭文件例用完文件后,使用文件流对象的成员函数关闭文件例如:如:infile.close();9/10/202429 4.4.1 用流成员函数实现输入/输出用流成员函数实现输入/输出n文件流类常用成员函数文件流类常用成员函数 9/10/202430 4.4.1 用流成员函数实现输入/输出用流成员函数实现输入/输出n文件打开方式说明文件打开方式说明 9/10/202431 4.4.4 文本文件的输入/输出(读写)文本文件的输入/输出(读写)【【例例4.11】】复制一个文本文件到一个目标文件当中复制一个文本文件到一个目标文件当中includevoid main(void){ char ch,f1[256],f2[256]; cout<<"请输入源文件名?请输入源文件名?"; cin>>f1; cout<<"请输入目标文件名?请输入目标文件名?"; cin>>f2; ifstream in(f1,ios::in | ios::nocreate); 9/10/202432 4.4.4 文本文件的输入/输出(读写)文本文件的输入/输出(读写) ofstream out(f2); if(!in){ cout<<"\n不能打开源文件不能打开源文件:"<>ch) out<

      求出文件中的这些实数之间用空格或换行符隔开求出文件中的这些实数的平均值和实数的个数实数的平均值和实数的个数includevoid main(void){float sum=0,t; int count=0; ifstream in("data1.txt",ios::in|ios::nocreate); if(!in) { cout<<"不能打开输入文件:不能打开输入文件:\n";return;} 9/10/202434 4.4.4 文本文件的输入/输出(读写)文本文件的输入/输出(读写)while(in>>t) //依次读一个实数依次读一个实数{ sum+=t,count++;} cout<<"\n实数的平均值实数的平均值="<

      程序设计9/10/202437 4.4.5 二进制文件的输入/输出(读写)二进制文件的输入/输出(读写)n二进制文件的读操作用成员函数二进制文件的读操作用成员函数read():():istream& istream::read(char*t, int n);istream& istream::read(unsigned char*t, int n);istream& istream::read(signed char*t, int n);9/10/202438 4.4.5 二进制文件的输入/输出(读写)二进制文件的输入/输出(读写)n二进制文件的写操作用成员函数二进制文件的写操作用成员函数write():(): ostream& ostream::write(const char*t, int n); ostream& ostream::write(const unsigned char*t, int n); ostream& ostream::write(const signed char*t, int n);9/10/202439 4.4.5 二进制文件的输入/输出(读写)二进制文件的输入/输出(读写)【【例例4.14】】将将1~100之间的所有偶数存入二进制文件之间的所有偶数存入二进制文件data2.dat中。

      中includevoid main(void){ ofstream out("data2.dat",ios::out|ios::binary); //Line1 if(!out){cout<<"data2.dat\n";return;} for(int i=2;i<100;i+=2) out.write((char*)&i,sizeof(int)); out.close(); cout<<"\n程序执行完毕!程序执行完毕!\n";} 9/10/202440 4.4.5 二进制文件的输入/输出(读写)二进制文件的输入/输出(读写)【【例例4.15】】 写一个整型数组和一个浮点型数组到二进制文件写一个整型数组和一个浮点型数组到二进制文件data3.dat中,然后从中,然后从data3.dat中读取数据,并显示中读取数据,并显示include#includevoid main(){int i_number[5]={10,20,30,40,50};float f_number[5]={1.53,2.2,3.0,4.0,5.55};int int_arr[5];float float_arr[5];ofstream out("data3.dat");//打开一个文件打开一个文件if(!out){cout<<"can not open data3\n";return;}9/10/202441 4.4.5 二进制文件的输入/输出(读写)二进制文件的输入/输出(读写) out.write((unsigned char*)&f_number,sizeof(f_number));//把把数组中的浮点数写入文件数组中的浮点数写入文件out.write((unsigned char*)&i_number,sizeof(i_number));//把把数组中的整数数写入文件数组中的整数数写入文件out.close();ifstream in("data3.dat");if(!in){cout<<"can not open data3\n";return;}in.read((unsigned char*)&float_arr,sizeof(float_arr));//从文件从文件把浮点数读入数组中把浮点数读入数组中in.read((unsigned char*)&int_arr,sizeof(int_arr));//从文件把整从文件把整数读入数组中数读入数组中in.close();9/10/202442 4.4.5 二进制文件的输入/输出(读写)二进制文件的输入/输出(读写)for(int i=0;i<5;i++)//显示浮点数显示浮点数{cout<

      并输出includevoid main(void){ int i,x; ofstream out("data3.dat",ios::out|ios::binary); if(!out){cout<<"不能打开文件不能打开文件d.dat\n";return;} for(i=5;i<200;i+=2) out.write((char*)&i,sizeof(int)); out.close(); 9/10/202446 4.4.6 文件的随机访问文件的随机访问ifstream f("data3.dat",ios::in|ios::binary); if(!f){ cout<<"不能打开文件不能打开文件d.dat\n"; return; } f.seekg(30*sizeof(int)); //文件指针移到指定位置文件指针移到指定位置 for(i=0;i<10&&!f.eof( );i++) { f.read((char*)&x,sizeof(int)); cout<

      建立输出字符串流对象ostrstream类提供的构造函数的原型类提供的构造函数的原型为:为: ostrstream::ostrstream(char*buffer,int n,int mode=ios::out);n建立输入字符串流对象建立输入字符串流对象 istrstream类提供了两个带参的构造函数,类提供了两个带参的构造函数,istrstream类提供类提供的构造函数的原型为:的构造函数的原型为:istrstream::istrstream(char*buffer); istrstream::istrstream(char*buffer,int n);n建立输入输出字符串流对象建立输入输出字符串流对象strstream类提供的构造函数的类提供的构造函数的原型为:原型为: strstream::strstream(char*buffer,int n,int mode);9/10/202448 4.5 字符串流字符串流【【例例4.17】】提取一个字符串中的每一个整数,并把它们依次存入提取一个字符串中的每一个整数,并把它们依次存入到一个字符串流中,最后向屏幕输出这个字符串流。

      字符串从到一个字符串流中,最后向屏幕输出这个字符串流字符串从键盘输入字符串流结束符使用的特殊字符键盘输入字符串流结束符使用的特殊字符“$” #includevoid main(){char a[50];char b[50];istrstream sin(a); //定义一个输入字符串流定义一个输入字符串流sin,使用的字,使用的字符数组为符数组为a ostrstream sout(b,sizeof(b));//定义一个输出字符串流定义一个输出字符串流sout,使用,使用b数组数组 9/10/202449 4.5 字符串流字符串流 cin.getline(a,sizeof(a));char ch=' ';int x; while(ch!='$') { if(ch>=48 && ch<=57) { sin.putback(ch); Ab108+506,446*55525/ad763,WfR40jjf:kk{63;99}$ 9/10/202450 4.5 字符串流字符串流 sin>>x; //从流中读入一个整数,当碰到非数字字从流中读入一个整数,当碰到非数字字 //符时则就认为一个整数结束。

      符时则就认为一个整数结束sout<>”运算符例例4.19】】重载提取和插入运算符,直接输入输出对象重载提取和插入运算符,直接输入输出对象。

      includeclass CMoney{ public:friend ostream& operator<<(ostream&,CMoney&);friend istream& operator>>(istream&,CMoney&);CMoney(int m=0,int c=0) {Dollar=m;Cents=c;} int Dollar,Cents;};ostream& operator<<(ostream& os,CMoney& m)9/10/202452 4.6 重载插入和提取运算符重载插入和提取运算符{ os<<"¥¥"<>(istream& is,CMoney& m){ is>>m.Dollar>>m.Cents; return is;}9/10/202453 4.6 重载插入和提取运算符重载插入和提取运算符void main(void){ CMoney m; cout<<"输入两个整数:输入两个整数:"; cin>>m; cout<

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.