- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * 15.3 异常处理中的构造与析构 上例中,在执行异常处理程序段之前,程序首先将try子句的保护程序段中已经构造但还未析构的局部Test类的对象t析构,然后执行异常处理程序。 第15章异常处理 cout “从这里继续执行程序!” endl; system(“pause”); //用于显示“按任意键继续…” return 0; } 进入try语句块,开始调用tryfunc函数。 Test类对象构造! tryfunc函数抛出一个异常整数值! Test类对象析构! 捕捉到异常整数值: 100 从这里继续执行程序! 请按任意键继续. . . * 15.3 异常处理中的构造与析构 将上例与上节的处理求0倒数的异常的例子进行比较,可发现两个程序中的catch语句中异常类型声明参数的写法不同。 处理求0倒数异常的程序中的写法是: 本节例子中的写法是: 第15章异常处理 catch(int); catch(int x); * 15.3 异常处理中的构造与析构 上述两种写法从语法角度都是正确的。当只需知道保护程序段抛出了某个类型的异常时,上述两种写法都是完全正确的;当不仅希望知道抛出的异常类型,还希望可以调用抛出的异常对象的值。这种情况必须使用第二种写法,将异常类型声明参数中的“变量名”也写清楚,以便在处理程序段中调用。 第15章异常处理 * 15.3 异常处理中的构造与析构 throw语句还有一种不带表达式的使用方法,即只写一个throw。这种写法的作用是将当前正在处理的异常继续抛出,以供更高级的异常处理机制进行处理。 这样的单throw表达式只能出现在catch子句的处理程序段或处理程序段中调用的函数体中。 这种再次抛出的异常对象仍然是原始的异常对象,而不是它的拷贝。例如: 第15章异常处理 * 15.3 异常处理中的构造与析构 第15章异常处理 try { throw 1000; } catch(int) { 处理程序段前半部分; //对异常作出部分响应 throw; //将异常继续抛出 } * 15.4 标准程序库异常处理 在C++标准里提供了标准异常的层次,这个层次以exception为基类,从它开始逐层构建出整个层次关系,标准程序库抛出的全部异常均是这个基类的派生类。这些类的派生继承层次关系如下图所示: 第15章异常处理 * 15.4 标准程序库异常处理 第15章异常处理 * 15.4 标准程序库异常处理 从上面的层次关系图中,我们可以看到,从基类exception可以派生出两个直接派生类:runtime_error和logic_error,而这个两个直接派生类又各自派生出许多派生类。而对整个层次关系,基类exception提供了服务what(),它在每个派生类中都重新定义,用于发送各自的错误信息。 第15章异常处理 * 15.4 标准程序库异常处理 exception类的几个派生类的使用场合: bad_alloc异常:在程序执行期间,当全局操作符new运算出现申请内存失败时抛出该异常; bad_cast异常:在程序执行期间,如果动态类型转换操作失败,由dynamic_cast抛出该异常; bad_typeid异常:在程序执行期间,当进行类型辨别的过程中,出现typeid的参数为零或空指针时,则抛出该异常; 第15章异常处理 * 15.4 标准程序库异常处理 bad_exception异常:如果发生意外异常时,可以通过在函数的抛出表中加上std::bad_exception,使系统调用unexcepted()函数抛出该异常,否则会终止程序或调用set_unexpected指定的函数; 第15章异常处理 * 15.4 标准程序库异常处理 logic_error逻辑异常类:C++标准程序库异常总是派生自该类,该类表示程序逻辑中的错误或者在程序中违反了类的不变性原则等,这一类错误均可以通过正确的编写代码来防止。C++标准程序库提供了以下逻辑异常类的派生类: invalid_argument——当向函数传入无效参数时产生; length_error——当长度超过所操作的对象允许的最大长度时产生; out_of_range——当数组下标之类的数值越界时产生; domain_error——当出现非法预处理错误时产生。 第15章异常处理 * 15.4 标准程序库异常处理 ios_base::failure:由C++标准程序库提供的特殊异常,当数据流由于错误或到达文件末尾而出现状态改变时抛出该异常; runtime_error异常类:该类的派生异常类是几个其它异常类的基类,该异常类用于指出只能在程序
您可能关注的文档
- C#语言程序设计李继武 彭德林电子教案 第7章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第八章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第二章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第九章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第六章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第七章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第三章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第十一章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第十章.ppt
- C#桌面系统开发案例教程 教学课件 作者 李建青 第四章.ppt
- 小学科学:ESP8266智能插座电路原理与动手实践研究教学研究课题报告.docx
- 《金融开放浪潮下我国多层次监管体系构建与创新研究》教学研究课题报告.docx
- 区域教育质量监测中人工智能应用的数据质量分析与优化策略教学研究课题报告.docx
- 《金融科技监管中的数据治理与合规性要求》教学研究课题报告.docx
- 《3D打印技术在航空航天领域中的多材料制造与复合材料应用》教学研究课题报告.docx
- 《绿色金融发展中的政府职能与市场机制研究》教学研究课题报告.docx
- 《植物工厂多层立体栽培光环境调控技术对植物生长发育节律的调控机制探讨》教学研究课题报告.docx
- 销售团队年度业绩总结.docx
- 银行风险管理与金融危机防范.docx
- 银行网络攻击预警与快速响应机制.docx
最近下载
- 建设项目环境影响评价现状评价报告-中化云龙有限公司.PDF VIP
- 智能家居门窗控制系统设计.doc VIP
- cpl随钻测井介绍资料.ppt VIP
- 关于医药行业上市公司财务分析--以恒瑞医药为例.docx VIP
- 乡村非遗文化传承与乡村振兴战略中的文化传承与产业融合报告.docx VIP
- 小学生课前准备课件.pptx VIP
- 大隐静脉曲张患者的术后护理研究进展.docx VIP
- cpl随钻测井介绍.pptx VIP
- 乡村非遗文化传承与乡村振兴战略中的文化传承与乡村振兴报告.docx VIP
- 2025年山东烟台莱阳市结合事业单位招聘征集本科及以上学历毕业生入伍笔试备考题库及答案详解一套.docx VIP
文档评论(0)