C大学基础教程实用.pptx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C大学基础教程实用.pptx》由会员分享,可在线阅读,更多相关《C大学基础教程实用.pptx(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023/3/231/45为什么强调异常处理电信系统的特点要求稳定,全年运行时间99.999%用户数量巨大,使用频繁例:BBS系统程序:稳定功能第1页/共48页第十三章 异常处理13.1 异常和异常处理 13.2C+异常处理机制13.3用类的对象传递异常13.4异常处理中的退栈和对象析构第2页/共48页2023/3/233/4513.1.1 异常及其特点 异常(Exceptions)是程序在运行时可能出现的会导致程序运行终止的错误。编译系统检查出来的语法错误,程序的逻辑错误,都不属于异常。异常是一个可以正确运行的程序在运行中可能发生的错误。常见的异常,如:系统资源不足。如内存不足;磁盘空间不足
2、等。用户操作错误导致运算关系不正确。如出现分母为0,数组越界等。第3页/共48页2023/3/234/4513.1.2 异常处理方法及举例对于程序中的异常,通常有三种处理的方法:不作处理。发布相应的错误信息,然后,终止程序的运行。适当的处理异常,一般应该使程序可以继续运行。而在C+中,异常处理(ExceptionHandling)就是用trythrowcatch的模式进行异常处理的机制。第4页/共48页2023/3/235/45例13.1程序将连续地输入两个实数,通过调用函数,返回这两个数相除的商。并且要注意除数不能为0。#include#includedoubledivide(doublea
3、,doubleb)if(b=0)/检测分母是不是为0cout除数不可以等于0!endl;abort();/调用abort函数终止运行returna/b;voidmain()调用divide用一般的方法处理程序异常第5页/共48页2023/3/236/45 如果出现分母为0的情况,运行将出现以下结果:第6页/共48页第十三章 异常处理13.1异常和异常处理13.2 C+异常处理机制 13.3用类的对象传递异常13.4异常处理中的退栈和对象析构第7页/共48页2023/3/238/4513.2 C+异常处理机制 try受保护语句;throw异常;其他语句;catch(异常类型)异常处理语句;检测和
4、抛掷检测和抛掷异常异常扑获和处理扑获和处理异常异常try模块模块第8页/共48页2023/3/239/45voidf()throw异常main()tryf();其他语句;catch(异常类型)异常处理语句;第9页/共48页2023/3/2310/4513.2 C+异常处理机制 在C+中,将异常检测程序所抛掷(throw)的“带有异常信息的对象”称为“异常”。而将捕获异常的处理程序称为异常处理程序(ExceptionHandler)。第10页/共48页2023/3/2311/45例13.2用C+的异常处理机制,重新处理例13.1。#include#includeusingnamespacestd
5、;doubledivide(doublea,doubleb)if(b=0)throw输入错误:除数不可以等于0!;returna/b;第11页/共48页2023/3/2312/45voidmain()doublex,y,z;coutxy)tryz=divide(x,y);catch(constchar*s)/startofexceptionhandlercoutsn;cout输入一对新的实数:;continue;/endofhandlercoutx除以y等于zn;cout输入下一组数:;cout程序结束,再见!n;第12页/共48页2023/3/2313/4513.2 C+异常处理机制程序运行
6、的一种结果是:输入两个实数x和y:1.23.2x除以y等于0.375输入下一组数:3.40输入错误:除数不可以等于0!输入一对新的实数:2.34.5x除以y等于0.511111输入下一组数:q程序结束,再见!第13页/共48页2023/3/2314/4513.2 C+异常处理机制阅读这个程序,可以注意以下几点:在try的复合语句中,调用了函数divide。因此,尽管divide函数是在try模块的外面定义的,它仍然是属于try模块:在try语句块中运行;divide函数检测到异常后,抛掷出一个字符串作为异常对象,异常的类型就是字符串类型;catch程序块指定的异常对象类型是char*,可以捕获
7、字符串异常。捕获异常后的处理方式是通过continue语句,跳过本次循环,也不输出结果,直接进入下一次循环,要求用户再输入一对实数。第14页/共48页2023/3/2315/4513.2 C+异常处理机制例13.2的执行过程可以简要的表示如下:第15页/共48页第十三章 异常处理13.1异常和异常处理13.2C+异常处理机制13.3 用类的对象传递异常 13.4异常处理中的退栈和对象析构第16页/共48页2023/3/2317/4513.3 用类的对象传递异常throw语句所传递的异常,可以是各种类型的:整型、实型、字符型、指针,等等。也可以用类对象来传递异常。优势在于可以传递和处理异常有关的
8、行为或者方法。专门用来传递异常的类称为异常类。异常类可以是用户自定义的,也可以是系统提供的exception类。第17页/共48页2023/3/2318/4513.3.1用户自定义类的对象传递异常 我们用第十章中的栈类模板来作为例子,类模板中两个主要的函数push和pop的定义中,都安排了错误检查的语句,以检查栈空或者栈满的错误。由于pop函数是有返回值的,在栈空的条件下,是没有数据可以出栈的。尽管pop函数可以检测到这种错误,但是,也不可能正常的返回,于是只好通过exit函数调用结束程序的执行。第18页/共48页2023/3/2319/452.43.21push(10.8)2.4push(2
9、.4)2.43.21push(3.21)10.8push(1.2)pop()pop()pop()10.82.43.21pop()第19页/共48页2023/3/2320/4513.3.1用户自定义类的对象传递异常现在,我们用C+异常处理的机制,改写这个程序。可以定义两个异常类:“栈空异常”类在try块中,如果检测到“栈空异常”,就throw一个“StackEmptyException”类的对象“栈满异常”类。如果检测到“栈满异常”,就throw一个“StackOverflowException”类的对象。第20页/共48页2023/3/2321/45/例13.3:带有异常处理的栈#includ
10、eusingnamespacestd;classStackOverflowException/栈满异常类public:StackOverflowException()StackOverflowException()voidgetMessage()cout异常:栈满不能入栈。endl;classStackEmptyException/栈空异常类public:StackEmptyException()StackEmptyException()voidgetMessage()cout异常:栈空不能出栈。endl;第21页/共48页2023/3/2322/45template/类模板定义classMy
11、StackTStackBufferi;intsize;inttop;public:MyStack(void):size(i)top=i;voidpush(constTitem);Tpop(void);第22页/共48页2023/3/2323/45template/push成员函数定义voidMyStack:push(constTitem)if(top0)StackBuffer-top=item;elsethrowStackOverflowException();/抛掷对象异常return;第23页/共48页2023/3/2324/45 template/pop成员函数定义TMyStack:po
12、p(void)if(topi)returnStackBuffertop+;elsethrowStackEmptyException();/抛掷另一个对象异常第24页/共48页2023/3/2325/45 voidmain()/带有异常处理的类模板测试程序MyStackss;for(inti=0;i10;i+)tryif(i%3)coutss.pop()endl;elsess.push(i);catch(StackOverflowException&e)e.getMessage();catch(StackEmptyException&e)e.getMessage();coutByen;程序执行的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学 基础教程 实用
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内