大工11秋《C++语言程序设计》辅导资料十八.docVIP

大工11秋《C++语言程序设计》辅导资料十八.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C/C++语言程序设计辅导资料十八 主 题:第二十二章 异常处理 学习时间:201年月日-月日 内 容: 我们这周主要学习第二十二章异常处理的相关内容,希望通过下面的内容能使同学们加深对本章相关知识点的理解。 知识脉络: 1.异常处理的基本思想; 2.异常处理的实现; 3.异常处理中的构造与析构。 重点与难点: 1.重点:异常处理的基本思想。 2.难点:异常处理的实现,异常处理中的构造与析构。 一、异常处理的基本思想 1、异常处理的基本观点 ①发现一个问题但不能处理它的函数时,引发一个异常,希望它的(直接或间接)调用者能够处理这个问题。 ②处理该问题的函数通过捕获这个异常来处理这个异常。 ③如果程序始终没有处理这个异常,最终它会被传到C++运行系统那里,运行系统捕获异常后通常只是简单的终止这个程序。 2、异常处理的实现(一) (1)try,throw和catch语句是c++语言中用于实现异常处理的机制。 (2)异常处理的语法: ①throw表达式语法:throw 表达式 ②try块语法:try 复合语句 ③catch (异常类型说明) 复合语句 3、异常处理的实现(二) ①若某段程序发现了自己不能处理的异常,就可用throw 表达式将这个异常“抛”给调用者。 ②try后的复合语句是代码的保护段。若预料某段程序代码有可能发生异常,就将它放在try子句之后。 ③catch子句后的复合语句是异常处理程序,捕获由throw表达式抛掷异常。 4、异常处理的实现(三) 异常处理的执行过程: ①控制通过正常的顺序执行到达try语句。 ②若保护段执行期间没有引起异常,则try后的catch子句就不执行。 ③若保护段执行期间有异常被抛掷,则从通过throw操作数创建的对象中创建一个异常对象,编译器在能够处理抛掷类型的异常的更高执行程序上下文中寻找一个catch子句。 5、异常处理的实现(四) ①若匹配的处理器未找到,则函数terminate将被自动调用(其缺省功能为调用abort终止程序)。 ②若找到一个匹配catch处理程序,形参初始化后,catch处理程序被执行。 6、处理除零异常,例: #includeiostream.h int Div(int x,int y); void main ( ) { try { //由于除法运算有可能出现除零异常,因此放在try块中 cout5/2Div(5,2)endl; cout8/0Div(8,0)endl; cout7/1Div(7,1)endl; } catch(int) //捕获整型异常 { coutexcep of deviding zero.\n; } coutthat is ok.\n; } int Div (int x, int y) { if(y= =0) throw y; //如果除数为零,抛掷一个整型异常 return x/y; } 二、异常处理中的构造与析构 1、相关知识 ①C++在堆栈展开期间,可以为异常抛掷前构造的所有局部对象自动调用析构函数。 ②在程序中,找到一个匹配的catch异常处理后,若其类型声明是值参数,则其初始化方式是复制被抛掷的异常对象;若其类型声明是引用,则其初始化方式是使该引用指向异常对象。 ③当catch异常类型声明参数被初始化后,栈的展开过程开始.这包括将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的所有自动对象进行析构.析构的顺序与构造的顺序相反。 2、使用带析构语义的类的C++异常处理,例1: class Demo { public; Demo( ); ~Demo( ); }; Demo::Demo( ) { cout构造Demo.endl; } Demo:: ~Demo( ); { cout“析构Demo.endl; } 3、使用带析构语义的类的C++异常处理,例2: void MyFunc( ) { Demo D; Cout在MyFunc()中抛掷Expt类异常。endl; Throw Expt( ); } int main( ) { cout在main函数中。endl; try { cout在try块中,调用MyFunc()。”endl; MyFunc( ); } catch(Expt E) { cout在catch异常处理程序中。endl; cout捕获到Expt类型异常:; coutE.ShowReason( )endl; } catch(char *str) { cout捕获到其它异常:strendl; } cout回到main函数。从这里恢复执行。endl; return 0; } 4、异常接口声明 ①为使用户能够知道所用的函数会抛掷那些异常,可在函数

文档评论(0)

ffpg + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档