- 1、本文档共33页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
17 卓跃教育
* 异常的典型使用 随时使用异常规格说明 起始于标准异常 套装用户自己的异常 使用异常层次 多重继承 用“引用”而非“值”去捕获 在构造函数中抛出异常 不要在析构函数中导致异常 避免无保护的指针 * 总结 异常处理的意义 C++的异常处理机制 异常的传播机制 异常的捕获规则 使用异常处理机制处理错误的方法 何时需要使用异常处理机制来处理错误 * 异常 第十八章 * 回顾 静态绑定与动态绑定 多态 虚函数 虚析构函数 抽象基类 * 目标 异常处理的好处 异常的抛出和传播 异常的捕获和处理 * 异常处理 在编写程序时,应该考虑确定程序可能出现的错误,然后加入处理错误的代码。也就是说,在环境条件出现异常情况下,不会轻易出现死机和灾难性的后果,而应有正确合理的表现。这就是异常处理。 异常处理机制可以提高程序的健壮性。 * 程序的错误 编译错误,即语法错误。程序就无法被生成运行代码。 运行时错误 不可预料的逻辑错误 可以预料的运行异常 例如: 动态分配空间时可能不会成功 打开文件可能会失败 除法运算时分母可能为0 整数相乘可能溢出 指针可能越界…… * 异常处理的方法2-1 使用选择语句(if…else…) 判断异常情况,即时处理 正常程序流程和异常处理语句混在一起 程序员往往无法专注于正常流程编程 * 异常处理的方法2-2 使用C++异常处理机制 判断异常情况,发现异常后抛出异常 正常程序流程和异常处理模块分开 程序员可以专注于正常流程编程,异常处理模块稍候编写 * C++异常处理机制 程序在产生错误后抛出异常 异常处理模块捕获并处理异常 异常处理机制一般无法使程序恢复正常执行 可以为程序提供有序的整理操作 异常处理机制将程序中的正常处理代码与异常处理代码显式区别开来,提高了程序的可读性 * 异常处理的实现2-1 关键字try:出错时产生异常的代码放在try块中 关键字throw:throw语句可以抛出任意类型的异常,包括自定义类型 关键字catch:catch块(异常处理器)捕捉和处理异常 * 异常处理的实现2-2 try { //try语句块 } catch(类型1 参数1) { //针对类型1的异常处理 } catch (类型2 参数2) { //针对类型2的异常处理 } … catch (类型n 参数n) { //针对类型n的异常处理 } //throw 表达式; * 异常处理的规则 try分程序必须出现在前,catch紧跟出现在后。catch之后的圆括号中必须含有数据类型,捕获是利用数据类型匹配实现的。 如果程序内有多个异常错误处理模块,则当异常错误发生时,系统自动查找与该异常错误类型相匹配的catch模块.查找次序为catch出现的次序。 如果异常错误类型为C++的类,并且该类有其基类,则应该将派生类的错误处理程序放在前面,基类的错误处理程序放在后面。 * 异常处理基础 如果try块没有异常抛出,则程序跳过所有catch块 try块可以直接或间接抛出异常 try块抛出异常后,程序控制离开try块 抛出异常后,程序在try块后面的catch块中逐个搜索合适的异常处理器 一个异常处理器一般只捕捉一种类型的异常 抛出异常之后,程序控制无法返回到抛出点 * 除数为零的异常例子2-1 #include iostream.h #include string.h class MyException {//定义异常类MyException public: MyException(char *str) {msg = str; } char * show() {return msg; } private: char *msg; }; double division(int dividend, int divisor){ if (divisor == 0) //除数为0时抛出异常 throw MyException(error: divided by zero!); return (double)dividend/divisor; } * 除数为零的异常例子2-2 main(){ int a, b; double result; coutEnter two integers (EOF to end):; while (cinab){ try { result = division(a,b); couta / b = resultendl; } catch (MyException e) { coute.show()endl; } coutendl; coutEnter two integers (EO
文档评论(0)