- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
异常Chapter15Exception
* * * * * * * * 在这种简单应用的场合,没必要使用异常,可以用下列代码替代: if(!in){ cout“Error Opening File”argv[1]“\n”; return 1;} for(string s; getline(in, s); coutsendl );} 15.2.3 跨越函数的异常处理 在f1502.cpp中,是在出现错误时,从出现错误处到处理错误处,沿着函数调用的足迹,一步步往上返回,几经周折后,出错信息早已丢失,剩下的只有出错状态,程序f1504.cpp改写为异常处理方式处理,就可以实现跨函数的大跳转了: f1504.cpp #includefstream #includeiostream using namespace std; void procFileName(string s); void procOpenMode(string s); void openIn(string s); void openOut(string s); int main(){ procFileName(iabc); procFileName(oabc);} void procFileName(string s){ try{ for(char c=0; c=9; c++) procOpenMode(s + c+.txt);} catch(string s){ couterror opening s not existed.\n;}} void procOpenMode(string s){ if(s[0]==i) openIn(s); else openOut(s);} void openIn(string s){ ifstream in(s.c_str()); if(!in) throw s+ inFile; for(string line; getline(in, line); coutline\n);} void openOut(string s){ fstream out(s.c_str(),ios::in|ios::out|ios::ate); if(!out) throw s+string( outFile); outs+ outFile is ok.\n; couts+ is here.\n;} 15.3.1 类型匹配 try语句中,涉及到类的,本质上都是函数调用。 异常机制与函数机制正交(互不干涉),但捕捉的方式是基于类型匹配。捕捉相当于函数返回类型的匹配,而不是函数参数的匹配,所以捕捉不用考虑一个抛掷中的多种数据类型匹配问题,如: f1506.cpp #includeiostream using namespace std; class A{}; class B{}; int main(){ try{ int j=0; double d=2.3; char str[20]=Hello; coutPlease input a exception number: ; int a; cina; switch(a){ case 1: throw d; case 2: throw j; case 3: throw str; case 4: throw A(); case 5: throw B(); default: coutNo throws here.\n; } }catch(int){ coutint exception.\n; }catch(double){ coutdouble exception.\n; }catch(char*){ coutchar* exception.\n; }catch(A){ coutclass A exception.\n; }catch(B){ coutclass B exception.\n; } coutThats ok.\n; }//==================================== catch代码块必须出现在try后,并且在try块后可以出现多个catch代码块,以捕捉各种不同类型的抛掷。 异常机制是基于这样的原理:程序运行实质上是数据实体在做一些操作,因此发生异常现象的地方,一定是某个实体出了差错,该实体所对应的数据类型便作为抛掷和捕捉的依据。 抛掷的实体已经存在,不需要通过类型转换来创建一个临时实体,实参与形参也不能用相容类型提升这一规则。另一方面,捕
您可能关注的文档
最近下载
- 无源隔离器;-;mcr-1clp-i-i-00;-;2814016.pdf VIP
- 广东开放大学学习指引(开放教育学习指引)题目及答案.docx
- 办事处食堂改造施工方案投标文件(技术方案).doc
- GB15979-2002 一次性使用卫生用品卫生标准.pdf VIP
- 可靠性鉴定考试试题库.doc VIP
- 九年级上册必背古诗词专项训练(含答案).docx VIP
- (2025秋新版本)人教版八年级数学上册全册教案 .pdf
- 《GBT20002.2-2008标准中特定内容的起草第2部分:老年人和残疾人的需求》(2025版)深度解析.pptx
- GB50877-2014 防火卷帘、防火门、防火窗施工及收规范.docx VIP
- 太湖县2021年(中小学、幼儿园)教师招聘试题及答案.docx VIP
原创力文档


文档评论(0)