版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第十四章I/O流,printf和scanf的缺陷,使用时需要写出比较繁琐的格式说明;printf(“%d,%f”,i,f);编译器无法检查对它们调用的正确性;doublef;printf(“%d”,f);inti;scanf(“%d”,i);只能进行基本数据类型的输入/输出,而c+中有大量的用户自己定义的类的对象;classX.;Xx;printf(“%?”,x);,流和流类库,流:数据从数据的生产者到数据的消费者的流动。流类库:提供一组类,程序利用它们可以方便的与外部世界交换数据。C+的流类库是用继承的方法建立起来的一个输入输出类库。流类库有两个基类:streambuf类和ios类;,str
2、eambuf类提供对缓冲区的低级操作,如缓冲区的设置、缓冲区的读写等。ios类主要定义了用于格式化输入/输出及出错处理的成员函数。每个流都和一种与设备相联系:与输入设备(如键盘)联系的流为输入流;与输出设备(如屏幕)联系的流为输出流;C+中预定义了标准输入流cin、标准输出流cout、非缓冲的出错流cerr和缓冲的出错流clog。,I/O流类层次,iosistreamistrstreamistream_withassignifstreamostreamostrstreamostream_withassignofstream,iostreamfstreamstrstreamstdiostream
3、,输出流,输出流对象是信息流动的目标;ostream,ofstream,ostrstreamostream类通过派生类ostream_withassign支持预先定义的流对象:cout:标准输出;cerr:标准错误输出,没有缓冲,发给它的内容立即输出;clog:类似于cerr,但有缓冲,缓冲区满时被输出;ofstream类支持磁盘文件输出;ostrstream类支持字符串输出;,流插入运算符,流插入运算符实现流的输出;对应每个基本数据类型,ostream流类都定义了重载运算符;ostream,标准输出,如果输出到标准输出设备,使用预先定义的cout、cerr、clog对象,不需要构造流对象。i
4、nta=10;couta;cerr“Error!;,输出文件流类ofstream,文件流类在fstream.h中定义;要将信息输出到文件,就要构造和建立ofstream流类对象,并打开文件;构造对象时指定文件名和模式:ofstream:ofstream(constchar*szName,intnMode=ios:out,intnProt=filebuf:openprot);例:ofstreamoutfile(data.dat,ios:nocreate);,文件名,文件打开模式,文件共享方式,使用ofstream类的缺省构造函数,再调用成员函数open:voidofstream:open(con
5、stchar*szName,intnMode=ios:out,intnProt=filebuf:openprot);如:ofstreamoutfile;outfile.open(data.dat,ios:binary);调用ofstream类的close成员函数关闭文件;在对象消失时,由析构函数关闭由构造函数或open成员函数打开的文件。,文件打开选择项,可以用|组合打开方式,文件保护方式选项,例:向文件myfile中写入一些信息,如果文件不存在,则创建该文件方式1:构造对象时打开文件ofstreamfout(e:a1myfile.txt);foutAtest.endl;方式2:使用成员函数o
6、penofstreamfout;fout.open(e:a1myfile.txt);foutAtest.endl;,向文件myfile中追加一些信息:方式1:构造对象时打开文件ofstreamfout(e:myfile.txt,ios:ate);foutAnewfileendl;方式2:调用成员函数openofstreamfout;fout.open(e:myfile.txt,ios:ate);foutAnewfileendl;,文件输出示例,#includevoidmain()char*name=QWERTYPOIUYT;intage=49;floatsalary=600.123f;ofst
7、reamfout(TEST.TXT);fout此行写入了TEST.TXT中n;foutnameagesalary;fout.close();,输出串流类ostrstream,串流类在strstream.h中定义;ostrstream:ostrstream(char*pch,intnLength,intnMode=ios:out);pch:指向字符串数组nLength:数组大小,当字符个数超过nLength时,字符串不再接受输出nMode:流创建方式如:charstr10;ostrstreamaout(str,sizeof(str);aoutastudentendl;,输出流类成员函数,put函
8、数:输出一个字符ostream,write函数:将内存中的一块内容写到输出流中;ostream,close()函数:关闭文件;ofstreamfout;fout.open(“file1”);fout.close();fout.open(“file2”);fout.close();,错误处理函数bad:出现不可恢复的错误,返回非0值fail:出现不可恢复的错误或一个预期条件,返回非0值good:没有错误,没有文件结束,返回非0值eof:文件结束,返回非0值clear:清除所有错误位rdstate:返回当前错误状态如:if(fout.fail()cerr“文件未打开”endl;,输入流,输入流对象
9、是信息流出的源头;istream,ifstream,istrstreamistream类通过派生类istream_withassign支持预先定义的流对象cin;ifstream类支持磁盘文件输入;istrstream类支持字符串输入;,流提取运算符,流提取运算符实现流的输入;对应每个基本数据类型,istream流类都定义了重载运算符;istream100Wang,输入文件流类ifstream,在fstream.h中定义;构造对象时打开文件ifstream:ifstream(constchar*szName,intnMode=ios:in,intnProt=filebuf:openprot);
10、调用成员函数voidifstream:open(constchar*szName,intnMode=ios:in,intnProt=filebuf:openprot);voidifstream:close();,文件输入示例,#includevoidmain()ifstreamfin(TEST.TXT);charline100;charname50;intage;floatsalary;finline;finnameagesalary;coutlineendl;coutnameagesalaryendl;fin.close();,输入串流类istrstream,在strstrea.h中定义;i
11、strstream(char*pch,intnLength);pch:字符串数组nLength:数组大小,当字符个数超过nLength时,字符串不再接受输入如:charstr10=student;chara5;istrstreamai(str,sizeof(a)-1);aia;,输入流类成员函数,get函数:输入一个字符或一系列字符charget();istream,fin.get(a,10);,getline函数:读取输入行;istream/从流中向存储器pch读入多个字符,直到遇到以下情况之一:1.所读字符个数将达到nCount;2.将遇到终止字符;3.文件结束。,read函数:从输入流中
12、读取指定数目的字符istream,seekg函数:设置下一个将读位置的指针istream,输入/输出流,一个iostream类的对象可以是数据的源或目的;fstream和strstream这是两个重要的I/O流类,它们是从iostream派生出来的,继承了前面所述的istream和ostream类的功能;fstream类支持磁盘文件的输入和输出;strstream类支持输入输出字符串;,流类成员函数控制格式,设置域宽:intios:width(intwid);设置填充字符:intios:fill(charc);设置显示精度:intios:precision(intnum);,voidmain(
13、)coutDefaultwidthis:cout.width()endl;coutDefaultfillis:cout.fill()endl;coutDefaultprecisionis:cout.precision()endl;cout666123.45678endl;cout.precision(6);cout.width(8);/只对下一个语句起作用coutCurrentwidthis:cout.width()endl;coutCurrentprecisionis:cout.precision()endl;cout.width(8);/只对下一个语句起作用cout666123.45678
14、endl;coutCurrentwidthis:cout.width()endl;cout.fill(*);cout.width(8);cout666123.45678endl;,Defaultwidthis:0Defaultfillis:Defaultprecisionis:6666123.457Currentwidthis:8Currentprecisionis:6666123.457Currentwidthis:0*666123.457,控制符控制格式,标准控制符(iomainp.h)dec:设置十进制转换基格式标志,用于输入/输出hex:设置十六进制转换基格式标志,用于输入/输出oct
15、:设置八进制转换基格式标志,用于输入/输出ws:提取空白字符,用于输入endl:插入换行符并刷新流,用于输出ends:在串后插入终止空字符,用于输出flush:刷新输出流,用于输出setbase(inti):设置转换基格式为n,用于输出resetiosflags(longf):清除由参数f指定的格式位,用于输入输出setiosflags(longf):用参数f设置格式位,用于输入输出setfill(intc):设置填充字符为c,用于输入输出setprecision(intn):设置浮点数精度为n,用于输入输出setw(intn):设置域宽为n,用于输入输出,重载运算符,重载插入运算符:istr
16、eampublic:complex(floatr,floati)real=r;image=i;complex()real=0;image=0;friendcomplexoperator+(complex,complex);friendostream,/定义重载运算符0)outputistream,voidmain()complexc1(2.4,4.6),c2,c3;coutc2;coutThevalueofc2is:c1endl;c3=c1+c2;coutThevalueofc3is:c1endl;,第十五章模板,功能完全一样,而只有参数类型不同的函数:intmin(inta,intb)ret
17、urnab?a:b;doublemin(doublea,doubleb)returnab?a:b;.,方案一:宏定义,宏:#definemin(a,b)(a)(b)?(a):(b)缺点:只简单替换参数,未进行数据类型检查;未经函数调用引起的其他问题:intarr10,num=0;int*p=,(p+)(template/ErrorTmin(Tx,Ty);template/OKTmin(Tx,Ty);templateTmax(Tx,Ty);template/OKT1min(T2x,T3y);template/ErrorT1min(T2x,T3y);,templateTmin(Tx,Ty)Tvar
18、;var=(xy?x:y);returnvar;voidmain()inta1=10,a2=20;coutmin(a1,a2)endl;charc1=a,c2=d;coutmin(c1,c2)endl;doublef1=2.4,f2=-1.3;coutmin(f1,f2)endl;,intmin(intx,inty)intvar;var=(xy?x:y);returnvar;,charmin(charx,chary)charvar;var=(xy?x:y);returnvar;,doublemin(doublex,doubley)doublevar;var=(xy?x:y);returnvar
19、;,模板函数,函数模板不是一个函数,只是对函数的描述,表示它每次能处理在类型形式参数表中说明的数据类型;模板被实例化时,实际的基本或用户定义的数据类型将替换模板的类型参数,生成一个模板函数;,classXinta,b;public:X(intx1,intx2):a(x1),b(x2);booloperatorTmin(Tx,Ty)return(xy?x:y);voidmain()Xx1(2,3),x2(1,5);coutmin(x1,x2)endl;,重载模板函数,templateTmin(Tx,Ty)return(xy?x:y);char*min(char*str1,char*str2)re
20、turn(strcmp(str1,str2)0?str1:str2);voidmain()inta1=10,a2=20;coutmin(a1,a2)endl;char*s1=Mary,*s2=John;coutmin(s1,s2)endl;,templateTmin(Tx,Ty)return(xy?x:y);voidmain()inta1=100;charc1=a;coutmin(a1,c1)endl;,errorC2782:T_cdeclmin(T,T):templateparameterTisambiguous,intmin(intx,chary)return(xy?x:y);,class
21、Student.;classStudentListStudent*stu;public:StudentList();StudentList();voidAdd(Student,classTeacher.;classTeacherListTeacher*stu;public:TeacherList();TeacherList();voidAdd(Teacher,类模板,类模板定义:template类声明使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值,能取任意类型。,templateclassc1private:Tnum;public:Tge
22、tnum()returnnum;,成员函数可定义在类外部:templateTc1:getnum()returnnum;,类模板的实例化:c1a;c1b;,templateclassVectorT*data;intsize;public:Vector(inti)data=newTi;size=i;Vector()deletedata;T,voidmain()Vectorvec(7);for(inti=0;i7;i+)veci=10*i;cout;for(i=0;i6;i+)coutveci,;coutveci;coutendl;,0,10,20,30,40,50,60,类模板的派生,从类模板派生
23、出普通类;templateclassBase.;classDerive:publicBase.;从类模板派生出类模板;templateclassBase.;templateclassDerive:publicBase.;,templateclassBaseprotected:Tdata;public:Base(Ti):data(i)voidadd(Tn);virtualvoidview();templatevoidBase:add(Tn)data=data+n;templatevoidBase:view()coutInBase,data=dataendl;,templateclassDeriv
24、e:publicBaseprotected:Ccdata;public:Derive(Tn,Cc):Base(n)cdata=c;voidview();templatevoidDerive:view()coutInBase,data=dataendl;coutInDerive,cdata=cdataendl;,main()Basebint(10);bint.add(10);bint.view();Derivedint(30,a);dint.view();return0;,InBase,data=20InBase,data=30InDerive,cdata=a,第十六章异常处理,异常处理的基本思
25、想,一个函数在发现了自己无法处理的错误时,抛出(throw)一个异常,希望它的直接或间接调用者能够处理这个问题;希望处理该问题的函数通过捕获(catch)这个异常并处理这个异常;如果程序始终没有处理这个异常,最终它会被传到C+运行系统那里,运行系统捕获异常后通常只是简单地终止这个程序。,实现,try,throw和catch语句是C+语言中用于实现异常处理的机制。异常处理的语法:try语句块语法:try复合语句throw表达式语法:throw表达式catch语句块语法:catch(异常类型说明)复合语句,try后的复合语句是代码的保护段。若预料某段程序代码有可能发生异常,就将它放在try子句之后;若某段程序发现了自己不能处理的异常,就可用th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年辽宁锦州文旅(集团)有限公司计划招录15人备考题库附答案详解
- 2026广东揭阳市揭东区审计局招聘政府雇员1人备考题库及1套参考答案详解
- 2026年兰州大学学报(医学版)编辑部聘用制B岗人员招聘备考题库及一套参考答案详解
- 2026四川省自然资源厅所属事业单位选调4人备考题库及1套完整答案详解
- 2026重庆武隆福康医院招聘护士15人备考题库有答案详解
- 2026吉林辽源市东辽县事业单位选聘42人备考题库完整答案详解
- 2026年湖南怀化市市属高校集中招聘6人备考题库及参考答案详解1套
- 2026年淮北师范大学公开招聘高层次海内外人才66名备考题库及参考答案详解1套
- 2026浙江省水产技术推广总站劳务派遣人员招聘1人备考题库及答案详解一套
- 2026广东深圳市宝安第一外国语学校(集团)黄麻布学校教师招聘备考题库及参考答案详解
- 2025初诊肺癌合并阻塞性肺炎临床诊疗专家共识
- 【语文】浙江省丽水市2024-2025学年高一下学期期末考试试题(解析版)
- 二级建造师执业能力提升指南
- 《健康养老服务基础》智慧健康养老服务与管理全套教学课件
- 【高考真题】福建省2025年高考物理试卷(含答案)
- 2025年高考湖北卷物理真题(解析版)
- DB31∕T 682-2025 古树名木和古树后续资源管护技术规范
- 中学学生仪容仪表(暂行)规定
- T/CCIAS 009-2023减盐酱油
- T/CAQI 244-2021室内LED健康照明设计要求
- 设备调试、试运行方案
评论
0/150
提交评论