C++大学基础教程课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C++大学基础教程课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 大学 基础教程 课件
- 资源描述:
-
1、C+大学基础教程第第13章章 异常处理异常处理程序设计的要求之一就是程序的健壮性。希望程序设计的要求之一就是程序的健壮性。希望程序在运行时能够不出或者少出问题。但是,程序在运行时能够不出或者少出问题。但是,在程序的实际运行时,总会有一些因素会导致在程序的实际运行时,总会有一些因素会导致程序不能正常运行。异常处理(程序不能正常运行。异常处理(Exception Handling)就是要提出或者是研究一种机制,能够就是要提出或者是研究一种机制,能够较好的处理程序不能正常运行的问题。较好的处理程序不能正常运行的问题。2022-10-143/45为什么强调异常处理电信系统的特点电信系统的特点要求稳定,
2、全年运行时间要求稳定,全年运行时间 99.999%用户数量巨大,使用频繁用户数量巨大,使用频繁例:例:BBS系统系统程序:程序:稳定稳定功能功能第十三章 异常处理13.1 异常和异常处理异常和异常处理 13.2 C+异常处理机制异常处理机制 13.3 用类的对象传递异常用类的对象传递异常 13.4 异常处理中的退栈和对象析构异常处理中的退栈和对象析构 2022-10-145/4513.1.1 异常及其特点 异常(异常(Exceptions)是程序在运行时可能出现是程序在运行时可能出现的会导致程序运行终止的错误。的会导致程序运行终止的错误。编译系统检查出来的语法错误,程序的逻辑错误,编译系统检查
3、出来的语法错误,程序的逻辑错误,都不属于异常。都不属于异常。异常是一个可以正确运行的程序在运行中可能发生异常是一个可以正确运行的程序在运行中可能发生的错误。的错误。常见的异常,如:常见的异常,如:系统资源不足。如内存不足;磁盘空间不足等。系统资源不足。如内存不足;磁盘空间不足等。用户操作错误导致运算关系不正确。如出现分母为用户操作错误导致运算关系不正确。如出现分母为0,数组越界等。数组越界等。2022-10-146/4513.1.2 异常处理方法及举例对于程序中的异常,通常有三种处理的方法:对于程序中的异常,通常有三种处理的方法:不作处理。不作处理。发布相应的错误信息,然后,终止程序的运行。发
4、布相应的错误信息,然后,终止程序的运行。适当的处理异常,一般应该使程序可以继续运行。适当的处理异常,一般应该使程序可以继续运行。而在而在C+中,异常处理(中,异常处理(Exception Handling)就是用就是用trythrowcatch的模式进行异常处理的模式进行异常处理的机制。的机制。2022-10-147/45 例例13.1 程序将连续地输入两个实数,通过调用函数,返回这两个程序将连续地输入两个实数,通过调用函数,返回这两个数相除的商。并且要注意除数不能为数相除的商。并且要注意除数不能为0。#include#include double divide(double a,double
5、 b)if(b=0)/检测分母是不是为检测分母是不是为0cout 除数不可以等于除数不可以等于0!endl;abort();/调用调用abort函数终止运行函数终止运行return a/b;void main()调用调用divide 用一般的方法处理程序异常2022-10-148/45 如果出现分母为如果出现分母为0 的情况,运行将出现以下结的情况,运行将出现以下结果:果:第十三章 异常处理13.1 异常和异常处理异常和异常处理 13.2 C+异常处理机制异常处理机制 13.3 用类的对象传递异常用类的对象传递异常 13.4 异常处理中的退栈和对象析构异常处理中的退栈和对象析构 2022-10
6、-1410/4513.2 C+异常处理机制 try 受保护语句受保护语句;throw 异常异常;其他语句其他语句;catch(异常类型异常类型)异常处理语句异常处理语句;检测和抛掷检测和抛掷异常异常扑获和处理扑获和处理异常异常try模块模块2022-10-1411/45void f()throw 异常异常main()tryf();其他语句其他语句;catch(异常类型异常类型)异常处理语句异常处理语句;2022-10-1412/4513.2 C+异常处理机制 在在C+中,将异常检测程序所抛掷(中,将异常检测程序所抛掷(throw)的)的“带有异常信息的对象带有异常信息的对象”称为称为“异常异常
7、”。而将捕获异常的处理程序称为异常处理程序而将捕获异常的处理程序称为异常处理程序(Exception Handler)。)。2022-10-1413/45例例13.2 用用C+的异常处理机制,重新处理例的异常处理机制,重新处理例13.1。#include#include using namespace std;double divide(double a,double b)if(b=0)throw 输入错误:除数不可以等于输入错误:除数不可以等于0!;return a/b;2022-10-1414/45void main()double x,y,z;cout x y)tryz=divide(x
8、,y);catch(const char*s)/start of exception handlercout s n;cout 输入一对新的实数:输入一对新的实数:;continue;/end of handler cout x 除以除以 y 等于等于 z n;cout 输入下一组数输入下一组数:;cout 程序结束,再见程序结束,再见!n;2022-10-1415/4513.2 C+异常处理机制程序运行的一种结果是:程序运行的一种结果是:输入两个实数输入两个实数 x 和和 y:1.2 3.2 x 除以除以 y 等于等于 0.375 输入下一组数输入下一组数:3.4 0 输入错误:除数不可以等
9、于输入错误:除数不可以等于0!输入一对新的实数:输入一对新的实数:2.3 4.5 x 除以除以 y 等于等于 0.511111 输入下一组数输入下一组数:q 程序结束,再见程序结束,再见!2022-10-1416/4513.2 C+异常处理机制阅读这个程序,可以注意以下几点:阅读这个程序,可以注意以下几点:在在try的复合语句中,调用了函数的复合语句中,调用了函数divide。因此,尽因此,尽管管divide函数是在函数是在try模块的外面定义的,它仍然是模块的外面定义的,它仍然是属于属于try模块:在模块:在try语句块中运行;语句块中运行;divide函数检测到异常后,抛掷出一个字符串作为
10、异函数检测到异常后,抛掷出一个字符串作为异常对象,异常的类型就是字符串类型;常对象,异常的类型就是字符串类型;catch程序块指定的异常对象类型是程序块指定的异常对象类型是char*,可以捕可以捕获字符串异常。捕获异常后的处理方式是通过获字符串异常。捕获异常后的处理方式是通过continue语句,跳过本次循环,也不输出结果,直接进入语句,跳过本次循环,也不输出结果,直接进入下一次循环,要求用户再输入一对实数。下一次循环,要求用户再输入一对实数。2022-10-1417/4513.2 C+异常处理机制例例13.2的执行过程可以简要的表示如下:的执行过程可以简要的表示如下:第十三章 异常处理13.
11、1 异常和异常处理异常和异常处理 13.2 C+异常处理机制异常处理机制 13.3 用类的对象传递异常用类的对象传递异常 13.4 异常处理中的退栈和对象析构异常处理中的退栈和对象析构 2022-10-1419/4513.3 用类的对象传递异常throw语句所传递的异常,可以是各种类型的:语句所传递的异常,可以是各种类型的:整型、实型、字符型、指针,等等。整型、实型、字符型、指针,等等。也可以用类对象来传递异常。优势在于可以传也可以用类对象来传递异常。优势在于可以传递和处理异常有关的行为或者方法。递和处理异常有关的行为或者方法。专门用来传递异常的类称为异常类。异常类可专门用来传递异常的类称为异
12、常类。异常类可以是用户自定义的,也可以是系统提供的以是用户自定义的,也可以是系统提供的exception类。类。2022-10-1420/4513.3.1用户自定义类的对象传递异常 我们用第十章中的栈类模板来作为例子,类模我们用第十章中的栈类模板来作为例子,类模板中两个主要的函数板中两个主要的函数push和和pop的定义中,都的定义中,都安排了错误检查的语句,以检查栈空或者栈满安排了错误检查的语句,以检查栈空或者栈满的错误。由于的错误。由于pop函数是有返回值的,在栈空函数是有返回值的,在栈空的条件下,是没有数据可以出栈的。尽管的条件下,是没有数据可以出栈的。尽管pop函数可以检测到这种错误,
13、但是,也不可能正函数可以检测到这种错误,但是,也不可能正常的返回,于是只好通过常的返回,于是只好通过exit函数调用结束程函数调用结束程序的执行。序的执行。2022-10-1421/452.43.21push(10.8)2.4push(2.4)2.43.21push(3.21)10.8push(1.2)pop()pop()pop()10.82.43.21pop()2022-10-1422/4513.3.1用户自定义类的对象传递异常现在,我们用现在,我们用C+异常处理的机制,改写这个异常处理的机制,改写这个程序。可以定义两个异常类:程序。可以定义两个异常类:“栈空异常栈空异常”类类在在try块中
14、,如果检测到块中,如果检测到“栈空异常栈空异常”,就,就throw一一个个“StackEmptyException”类的对象类的对象“栈满异常栈满异常”类。类。如果检测到如果检测到“栈满异常栈满异常”,就,就throw一个一个“StackOverflowException”类的对象。类的对象。2022-10-1423/45/例例13.3:带有异常处理的栈:带有异常处理的栈#include using namespace std;class StackOverflowException/栈满异常类栈满异常类public:StackOverflowException()StackOverflowE
15、xception()void getMessage()cout 异常:栈满不能入栈。异常:栈满不能入栈。endl;class StackEmptyException/栈空异常类栈空异常类public:StackEmptyException()StackEmptyException()void getMessage()cout 异常:栈空不能出栈。异常:栈空不能出栈。endl;2022-10-1424/45template /类模板定义类模板定义class MyStack T StackBufferi;int size;int top;public:MyStack(void):size(i)to
16、p=i;void push(const T item);T pop(void);2022-10-1425/45template /push成员函成员函数定义数定义void MyStack:push(const T item)if(top 0)StackBuffer-top=item;else throw StackOverflowException();/抛掷抛掷对象异常对象异常 return;2022-10-1426/45 template /pop成员函数成员函数定义定义T MyStack:pop(void)if(top i)return StackBuffertop+;else thro
17、w StackEmptyException();/抛掷另一个对抛掷另一个对象异常象异常2022-10-1427/45 void main()/带有异常处理的类模带有异常处理的类模板测试程序板测试程序MyStack ss;for(int i=0;i10;i+)try if(i%3)coutss.pop()endl;else ss.push(i);catch(StackOverflowException&e)e.getMessage();catch(StackEmptyException&e)e.getMessage();coutByen;程序执行的结果是:程序执行的结果是:0 0异常:栈空不能出
展开阅读全文