- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
异常存在于程序的正常功能之外,并要求程序立即处理。.ppt
* C++ 面向对象程序设计 第9章 异常处理 (Exception Handling) 本章内容 异常的概念 异常处理机制及意义 标准异常 异常的捕获和处理 异常处理中的构造与析构 开销 9.1 异常的概念 异常是指程序运行时出现的不正常情况,包括运行时发生的错误,如除数为零、存储空间不足或遇到意外的非法输入等等。 异常存在于程序的正常功能之外,并要求程序立即处理。通过异常可以将问题的检测和解决分离,方便了程序的开发和设计。 异常处理提供了一种标准的方法以处理错误,发现可预知或不可预知的问题。 9.2 异常处理机制 try块(try block) 错误处理部分用try块来处理异常。 throw表达式(throw expression) 系统通过throw表达式抛出异常,错误检测部分使用这种表达式来说明遇到了无法处理的错误。 由标准库定义的一组异常类 由标准库定义的一组异常类用来在throw和相应的catch之间传递有关的错误信息。 表9-1 标?准?异?常?类 9.3 标准异常 9.4 异常的捕获和处理 异常通过抛出对象引发,该对象的类型决定应该激活哪个处理代码。异常以类似于将实参传递给函数的方式抛出和捕获。 完成函数调用时的异常测试,其异常对象的捕获和处理由try-throw-catch 结构实现,使得处理程序运行错误的编码变得方便、有效,并具有完全的结构化和良好的可读性。 try{ … //被测试的程序代码 throw… //抛出异常 }catch(异常类型 异常对象名){ … //异常处理的程序代码} 1. try语句块 try { Some_code_to_try; Possibly_throw_an_exception; More_code; } try { cout Enter number of donuts:\n; cin donuts; cout Enter number of glasses of milk:\n; cin milk; if (milk = 0) throw donuts; dpg = donuts/double(milk); cout donuts donuts.\n milk glasses of milk.\n You have “ dpg donuts for each glass of milk.\n; } 2. throw 语句 Syntax: throw Expression_for_Value_to_be_Thrown; if (milk = 0) throw donuts; throw语句一般总嵌入在分支语句中,如:if语句。 3. catch语句块 Example: catch(int e) { cout e donuts, and no milk!\n Go buy some milk.\n; } // Here, e is the catch block parameter. catch(…) { cout “an unkown exception was thrown” endl; } 捕获所有类型的异常: 注意: 一个try-block 语句块后面紧跟着一个或多个 catch语句块. try-block 语句块中包含 throw 语句. throw 语句只能在异常情况下被执行。此时,try-block抛出一个某种类型的值。 try-block 在执行了throw语句后就结束。 【例9-1】 如果new或new[ ]不能分配所请求的存储空间,将抛出一个bad_alloc异常。可以通过如下方式检测存储空间的分配是否失败: int *ptr; … //其他代码 try { //可能产生异常的语句 ptr = new int; } catch(bad_alloc) { cerrnew:unable to allocate storage…aborting\n; exit(EXIT_FAILURE); //EXIT_FAILURE定义在头文件cstdlib.h中}… //分配成功后执行的代码 #include iostream using namespace std; int
文档评论(0)