《c++程序设计》课件第10章 异常处理.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《c++程序设计》课件第10章 异常处理.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+程序设计 c+程序设计课件第10章 异常处理 c+ 程序设计 课件 10 异常 处理
- 资源描述:
-
1、C+程序设计第第10 10章章 异常处理异常处理第第10章章 异常处理异常处理本章学习要点本章学习要点一个好的程序不仅要保证能实现所需要的功能,一个好的程序不仅要保证能实现所需要的功能,而且还应该有很好的容错能力。在程序运行过程而且还应该有很好的容错能力。在程序运行过程中如果有异常情况出现,程序本身应该能解决这中如果有异常情况出现,程序本身应该能解决这些异常,而不是死机。本章介绍异常处理的基本些异常,而不是死机。本章介绍异常处理的基本概念、概念、C+异常处理语句、析构函数与异常处理。异常处理语句、析构函数与异常处理。通过本章的学习,掌握了通过本章的学习,掌握了C+异常处理的机制,异常处理的机制
2、,我们就可以在编制程序时灵活地加以运用,从而我们就可以在编制程序时灵活地加以运用,从而使我们编制的程序在遇到异常情况时能摆脱大的使我们编制的程序在遇到异常情况时能摆脱大的影响,避免出现死机等现象影响,避免出现死机等现象。第第10章章 异常处理异常处理10.1 异常处理的概念及异常处理的概念及C+异常处理的异常处理的基本思想基本思想10.2 异常处理的实现异常处理的实现10.3 学生信息管理系统中的异常处理学生信息管理系统中的异常处理10.1 异常处理的概念及异常处理的概念及C+异常处理的基本思想异常处理的基本思想v程序中常见的错误有两大类:语法错程序中常见的错误有两大类:语法错误和运行错误。在
3、编译时,编译系统误和运行错误。在编译时,编译系统能发现程序中的语法错误(如关键字能发现程序中的语法错误(如关键字拼写错误,变量名未定义,语句末尾拼写错误,变量名未定义,语句末尾缺分号,括号不配对等),程序员通缺分号,括号不配对等),程序员通过错误提示可以进行修改。过错误提示可以进行修改。v有的程序虽然能通过编译,也能投入运行,但是有的程序虽然能通过编译,也能投入运行,但是在运行过程中会出现异常,得不到正确的运行结在运行过程中会出现异常,得不到正确的运行结果,甚至导致程序不正常终止或出现死机现象,果,甚至导致程序不正常终止或出现死机现象,这些都说明程序中存在运行错误。运行错误相对这些都说明程序中
4、存在运行错误。运行错误相对来说比较隐蔽,是程序调试中的一个难点,该错来说比较隐蔽,是程序调试中的一个难点,该错误又可分为逻辑错误和运行异常两类。逻辑错误误又可分为逻辑错误和运行异常两类。逻辑错误是由设计不当造成的,如对算法理解有误、在一是由设计不当造成的,如对算法理解有误、在一系列计算过程中出现除数为系列计算过程中出现除数为0、数组的下标溢出、数组的下标溢出等。这些错误只要我们在编程时多加留意是可以等。这些错误只要我们在编程时多加留意是可以避免的。但是,运行异常是由系统运行环境造成避免的。但是,运行异常是由系统运行环境造成的,导致程序中内存分配、文件操作及设备访问的,导致程序中内存分配、文件操
5、作及设备访问等操作的失败,可能会造成系统运行失常并瘫痪。等操作的失败,可能会造成系统运行失常并瘫痪。v在运行没有异常处理的程序时,如果运行在运行没有异常处理的程序时,如果运行情况出现异常,由于程序本身不能处理,情况出现异常,由于程序本身不能处理,程序只能终止运行。如果在程序中设置了程序只能终止运行。如果在程序中设置了异常处理,则在运行情况出现异常时,由异常处理,则在运行情况出现异常时,由于程序本身已设定了处理的方法,于是程于程序本身已设定了处理的方法,于是程序的流程就转到异常处理代码段处理。序的流程就转到异常处理代码段处理。v需要说明的是:只要程序运行时出现与人需要说明的是:只要程序运行时出现
6、与人们期望的情况不同,都可以认为是异常,们期望的情况不同,都可以认为是异常,并对它进行异常处理。因此,所谓异常处并对它进行异常处理。因此,所谓异常处理是指对程序运行时出现的差错以及其他理是指对程序运行时出现的差错以及其他例外情况的处理。例外情况的处理。10.2 异常处理的实现异常处理的实现10.2.1 异常处理语句异常处理语句C+处理异常的机制由处理异常的机制由3个部分组成:检查(个部分组成:检查(try)、抛出)、抛出(throw)和捕捉()和捕捉(catch)。把需要检查的语句放在)。把需要检查的语句放在try块中,块中,throw用来当出现异常时抛出一个异常信息,而用来当出现异常时抛出一
7、个异常信息,而catch则用来捕则用来捕捉异常信息,如果捕捉到了异常信息,就处理它。捉异常信息,如果捕捉到了异常信息,就处理它。try-throw-catch构成了构成了C+异常处理的基本结构,形式如下:异常处理的基本结构,形式如下:try if(表达式表达式1)throw x1if(表达式表达式2)throw x2if(表达式表达式n)throw xncatch(异常类型声明(异常类型声明1)异常处理语句序列异常处理语句序列 catch(异常类型声明(异常类型声明2)异常处理语句序列异常处理语句序列 catch(异常类型声明(异常类型声明n)异常处理语句序列异常处理语句序列 这里,这里,tr
8、y语句块内为需要受保护的待检测异常的语句语句块内为需要受保护的待检测异常的语句序列,如果怀疑某段程序代码在执行时有可能发生序列,如果怀疑某段程序代码在执行时有可能发生异常,就将它放入异常,就将它放入try语句块中。当这段代码的执行语句块中。当这段代码的执行出现异常时,即某个出现异常时,即某个if语句中的表达式的值为真时,语句中的表达式的值为真时,会用其中的会用其中的throw语句来抛掷这个异常。语句来抛掷这个异常。throw语句语法:语句语法:throw 表达式表达式;throw语句是在程序执行发生了异常时用来抛掷这个异常的,其语句是在程序执行发生了异常时用来抛掷这个异常的,其中表达式的值可以
9、是中表达式的值可以是int、float、字符串、类类型等,把异常抛掷、字符串、类类型等,把异常抛掷给相应的处理者,即类型匹配的给相应的处理者,即类型匹配的catch语句块。如果程序中有多处语句块。如果程序中有多处需要抛掷异常,应该用不同类型的操作数来互相区别。需要抛掷异常,应该用不同类型的操作数来互相区别。throw抛出抛出的异常,通常是被的异常,通常是被catch语句捕获。语句捕获。catch语句块是紧跟在语句块是紧跟在try语句块后面的,即语句块后面的,即try块和块和catch块作为块作为一个整体出现,一个整体出现,catch块是块是try-catch结构中的一部分,必须紧跟在结构中的一
10、部分,必须紧跟在try块之后,不能单独使用,在二者之间也不能插入其他语句。但是块之后,不能单独使用,在二者之间也不能插入其他语句。但是在一个在一个try-catch结构中,可以只有结构中,可以只有try块而无块而无catch块。即在本函数块。即在本函数中只检查而不处理,把中只检查而不处理,把catch块放在其他函数中。一个块放在其他函数中。一个try-catch结结构中只能有一个构中只能有一个try块,但却可以有多个块,但却可以有多个catch块,以便与不同类型块,以便与不同类型的异常信息匹配。在执行的异常信息匹配。在执行try块中的语句时如果出现异常执行了块中的语句时如果出现异常执行了thr
11、ow语句,系统会根据语句,系统会根据throw抛出的异常信息类型按抛出的异常信息类型按catch块出现块出现的次序,依次检查每个的次序,依次检查每个catch参数表中的异常声明类型与抛掷的异参数表中的异常声明类型与抛掷的异常信息类型是否匹配,当匹配时,该常信息类型是否匹配,当匹配时,该catch块就捕获这个异常,执块就捕获这个异常,执行行catch块中的异常处理语句来处理该异常。块中的异常处理语句来处理该异常。在在catch参数表中,一般只写异常信息的类型名,参数表中,一般只写异常信息的类型名,如:如:catch(double)。系统只检查所抛掷的异常信息类型是否与系统只检查所抛掷的异常信息类
12、型是否与catch参参数表中的异常声明类型相匹配,而不检查它们的值。数表中的异常声明类型相匹配,而不检查它们的值。假如变量假如变量a,b,c都是都是int型,即使它们的值不同,在型,即使它们的值不同,在throw语句中写语句中写throw a、throw b或或throw c的作用也的作用也均是相同的。因此,如果需要检测多个不同的异常信均是相同的。因此,如果需要检测多个不同的异常信息,应当由息,应当由throw抛出不同类型的异常信息。抛出不同类型的异常信息。异常信息类型可以是异常信息类型可以是C+系统预定义的标准类型,系统预定义的标准类型,也可以是用户自定义的类型也可以是用户自定义的类型(如结
13、构体或类如结构体或类)。如果由。如果由throw抛出的异常信息属于该类型或其子类型,则抛出的异常信息属于该类型或其子类型,则catch与与throw二者匹配,二者匹配,catch捕获该异常信息。注捕获该异常信息。注意:系统在检查异常信息数据类型的匹配时,不会进意:系统在检查异常信息数据类型的匹配时,不会进行数据类型的默认转换,只有与所抛掷的异常信息类行数据类型的默认转换,只有与所抛掷的异常信息类型精确匹配的型精确匹配的catch块才会捕获这个异常。块才会捕获这个异常。在在catch参数表中,除了指定异常信息的类型名外,还参数表中,除了指定异常信息的类型名外,还可以指定变量名,如:可以指定变量名
展开阅读全文