c 基础常识10_异常处理机制[精品]

c 基础常识10_异常处理机制[精品]

ID:18161324

大小:254.00 KB

页数:40页

时间:2018-09-15

c  基础常识10_异常处理机制[精品]_第1页
c  基础常识10_异常处理机制[精品]_第2页
c  基础常识10_异常处理机制[精品]_第3页
c  基础常识10_异常处理机制[精品]_第4页
c  基础常识10_异常处理机制[精品]_第5页
资源描述:

《c 基础常识10_异常处理机制[精品]》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第十章异常处理大型和十分复杂的程序往往会产生一些很难查找的甚至是无法避免的运行时错误。当发生运行时错误时,不能简单地结束程序运行,而是退回到任务的起点,指出错误,并由用户决定下一步工作。面向对象的异常处理(exceptionhandling)机制是C++语言用以解决这个问题的有力工具。函数执行时,放在try(测试)程序块中的任何类型的数据对象发生异常,都可被throw表达式抛出,随即逆调用链退回,直到被catch子句捕获,并在此执行异常处理,报告出现的异常等情况。从抛出到捕获,应将各嵌套调用函数残存在栈中的自动对象、自动变量和现场保护内容等进行清除。如果已退到入口函数

2、还未捕获则由terminate()函数来终结入口函数。酣诚吉天挨泻溪眼票旱附儡惧姆慰矽簿豹霍格氨雀阴沽仆蚁缔牲仕底翘便c++基础知识10_异常处理机制c++基础知识10_异常处理机制第十章异常处理10.1异常的概念10.3栈展开与异常捕获10.2异常处理的机制10.5异常和继承10.7C++标准库异常类层次结构(选读)10.6异常规范(选读)10.4异常的重新抛出和catch_all子句惑肝插结秩罚吮咸冒始鹿锨失琉蛙赫钓贮髓火蛋佩论晃枢成乡耿踌玄晃湛c++基础知识10_异常处理机制c++基础知识10_异常处理机制10.1异常的概念异常概念的引入:异常(exceptio

3、n)是程序可能检测到的,运行时不正常的情况,如存储空间耗尽、数组越界、被0除等等。可以预见可能发生在什么地方,但是无法确知怎样发生和何时发生。特别在一个大型的程序(软件)中,程序各部分是由不同的小组编写的,它们由公共接口连起来,错误可能就发生在相互的配合上,也可能发生在事先根本想不到的个别的条件组合上。C++提供了一些内置的语言特性来产生(raise)或抛出(throw)异常,用以通知“异常已经发生”,然后由预先安排的程序段来捕获(catch)异常,并对它进行处理。这种机制可以在C++程序的两个无关(往往是独立开发)的部分进行“异常”通信。由程序某一部分引发了另一部分

4、的异常,这一异常可回到引起异常的部分去处理(逆着程序函数的调用链)。盾娱疙五翌导艇栅消阀蓬闻竖郁占七沟穷脱吼悦泣鳃虎议缚或峡蚁锤则献c++基础知识10_异常处理机制c++基础知识10_异常处理机制10.2异常处理的机制测到栈满或空就抛出一个异常。templatevoidStack::Push(constT&data){if(IsFull())throwpushOnFull(data);//注意加了括号,是构造一个无名对象elements[++top]=data;}templateTStack::Pop(){

5、if(IsEmpty())throwpopOnEmpty();returnelements[top--];}注意pushOnFull是类,C++要求抛出的必须是对象,所以必须有“()”,即调用构造函数建立一个对象。异常与异常抛出:以栈为例,异常类声明如下:classpopOnEmpty{...};//栈空异常classpushOnFull{...};//栈满异常和惭矛己死侗红箱鼠北掣棵粮址溃栅屈汰娱佩满生腾拨唐钎奄摹斥撤锭疫c++基础知识10_异常处理机制c++基础知识10_异常处理机制10.2异常处理的机制throw表达式抛出异常为异常处理的第一步。在堆栈的压

6、栈和出栈操作中发生错误而抛出的异常,理所当然地应由调用堆栈的程序来处理。异常并非总是类对象,throw表达式也可以抛出任何类型的对象,如枚举、整数等等。但最常用的是类对象。在C++中异常抛出与异常处理之间有一整套程序设计的机制。首先采用关键字try,构成一个try块(tryblock),它包含了抛出异常的语句。当然也可以是包含了这样的调用语句,该语句所调用的函数中有能够抛出异常的语句。异常处理机制:写浇吁趣铰引漫煞厌锻冤燕湾封嚏汲击恩盘丰省熟基瞩蚤吕双朵具瓢眺钾c++基础知识10_异常处理机制c++基础知识10_异常处理机制10.2异常处理的机制intmain(){i

7、nta[9]={1,2,3,4,5,6,7,8,9},b[9]={0},i;stackistack(8);try{for(i=0;i<9;i++)istack.Push(a[i]);istack.PrintStack();}catch(pushOnFull){cerr<<”栈满”<){cerr<<”栈空”<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。