8.1异常处理-中科大继续教育学院.ppt

  1. 1、本文档共42页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1异常处理-中科大继续教育学院

中国科大学继续教育学院 李艺 leeyi@ 第一章 C++的初步知识 第二章 类和对象 第三章 再论类和对象 第四章 运算符重载 第五章 继承与派生 第六章 多态性与虚函数 第七章 输入输出流 第八章 C++工具 第九章 模板 8.1 异常处理 8.2 命名空间 8.3 使用早期的函数库 8.1 异常处理 概述:程序的错误有两种:一种是编译错误,即语法错误。另一种是在运行时发生的异常(exception) 。  异常处理机制只处理运行时的差错和其它例外情况,不包括编译错误。 处理异常的方法有: 非结构化异常处理:用 exit (n) 或 return (n)的运行期错误处理机制,具有“一个入口,多个出口”的特点。exit()会清空流和关闭打开的文件。abort()却不会清空流,也不关闭打开的文件。 结构化的异常处理:按“警告—忽略”、“对话—补救”或安全退出等模式,使程序可以在对运行条件做出适当安排或改善后继续运行下去。 8.1 异常处理 基本思想: C++的异常处理的基本思想是将异常的检测与处理分离。 在一个函数体中检测到异常条件满足,但无法确定相应的处理方法时,就引发一个异常,然后由函数的直接或间接调用者处理此异常。 C++的异常处理建立在三个关键字基础之上: try 、catch 和 throw。 8.1 异常处理 C++异常处理语句的一般形式 try { //try 块内监视异常 if (条件)throw exception; //由throw 抛出异常 … ; //其它语句 } catch( 类型1 参数1 ) { //catch块内处理代码 } catch( 类型2 参数2 ) { … ; } …… catch( 类型n 参数n ) { … ; } 8.1 异常处理 8.1 异常处理 说明 如果预料某段程序代码有可能发生异常,就将它放在try子句的化括号中。如果这段代码运行时真的遇到异常情况,其中的throw表达式就会抛出这个异常。 出现异常时,try语句块提示编译器到哪里查找catch块,没有紧跟try块的catch块是没有作用的。 当没有发生异常的时候,几乎没有和try块相关的运行时成本。查找匹配捕获处理异常的过程只在发生异常的情况下才会进行。 8.1 异常处理 catch子句后的复合语句是异常处理程序。它捕获由throw表达式抛出的异常。 异常类型说明部分指明该子句处理的异常的类型,它与函数的形参是相似的。可以是某个类型的值,也可以是引用。 如果某个catch语句的参数类型与引发异常的信息数据类型相匹配,则执行该catch语句的异常处理(捕获异常),此时,由throw语句抛出的异常信息(值)传递给catch语句中的参数。 8.1 异常处理 try语句块必须出现在前,catch紧跟在后。catch之后的圆括号中必须含有数据类型,捕获是利用数据类型匹配实现的。在try{…} 和catch(…){ …}语句之间不得插入任何其它C++语句。 如果程序内有多个异常处理模块,则当异常发生时,系统自动查找与该异常类型相匹配的catch模块,查找次序为catch出现的次序。需要注意的是catch处理程序的出现顺序很重要,因为在一个try块中,异常处理程序是按照它出现的顺序被检查的。 8.1 异常处理 引发异常的throw语句必须在try语句块内,或是由try语句块中直接或间接调用的函数体执行。throw语句的一般形式为: throw exception; exception表示一个异常值,它可以是任意类型的变量、对象或常量。 8.1 异常处理 8.1 异常处理 异常的类型匹配规则 C++规定,当一个异常对象和catch子句参数类型符合下列条件时,匹配成功: 如果catch子句参数类型就是异常对象的类型或其引用 如果catch子句参数类型就是异常对象的public基类 如果catch子句参数类型为基类指针或引用,而异常对象为派生类指针或引用。 catch子句参数类型为void*,异常对象为任何类型指针。 catch子句为catch-all,即catch{…}。 catch处理程序按照其在try块后面的顺序依次为检测,一旦匹配,则后面的就不再检测。 8.1 异常处理 异常的匹配规则比函数重载的匹配规则更为严格 try { throw int(); } catch (unsigned int) { …… } 抛出异常的类型是int型,然而handler却期待一个unsigned int。异常处理机制不认为二者是能够匹配的类型;结果

文档评论(0)

teda + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档