C面向对象程序设计第12章异常处理.ppt
《C面向对象程序设计第12章异常处理.ppt》由会员分享,可在线阅读,更多相关《C面向对象程序设计第12章异常处理.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C+面向对象程序设计 第1章 C+概述第2章 类和对象第3章 面向对象程序设计概述第4章 进一步学习类和对象第5章 堆与复制构造函数第6章 继承性:派生类第7章 运算符重载第8章 虚函数和多态性第9章 模板第10章 类库和C+的标准模板库STL第11章 输入输出流第12章 异常处理第12章 异常处理12.1 异常处理的概念12.2 C语言处理异常的方法12.3 C+语言的异常处理方法12.4 异常类和C+标准异常12.1 异常处理的概念异常(Exception)是程序可能检测到的运行时刻不正常的情况。最常见的异常包括除数为0,数组越界访问,磁盘或者光盘读写失败,无效数据,内存耗尽,网络不通等。
2、异常总是代表着某些不该发生的事情发生了异常错误在程序运行阶段由于系统异常原因而产生的错误称为异常错误异常错误异常错误与程序设计错误是两码事异常错误与程序设计错误程序设计错误程序设计错误是指程序员在设计程序时由于人为因素所产生的错误。异常错误异常错误是在程序运行时由于系统异常原因而产生的,不是程序员的失误所致。如果不排除程序设计程序设计错误错误,程序就不能通过编译检查或运行结果不对。如果不处理异常错误异常错误,程序执行时遇到异常情况就会突然终止或失控,使用户感到莫名其妙。一个异常错误的例子#include#include using namespace std;int main(int argc
3、,char*argv)ifstream source(argv1);/打开文件 char line128;()source.getline(line,sizeof(line);cout line endl;source.close();return 0;异常处理异常处理即异常错误处理异常处理的任务就是使程序的运行过程能从异常错误中恢复过来继续执行或者通知用户遇到了何种异常,不得不停止执行。Improved error recovery is one of the most powerful ways you can increase the robustness of your code.ro
4、bustness 鍵壯性,穩固性,穩健性,堅固性异常处理的例子int main(int argc,char*argv)ifstream source(argv1);/打开文件 char line128;if(source.fail()cout error opening the file argv1 endl;exit(1);()source.getline(line,sizeof(line);cout line endl;source.close();return 0;异常处理代码12.2 C语言处理异常的方法12.2.1 检查函数的返回值来发现异常错误12.2.2 使用signal()和
5、raise()函数12.2.3 使用非局部的跳转Goto函数12.2.1 检查函数的返回值来发现异常错误从函数返回出错信息,如果函数的返回值不便于返回出错信息,就设置一个全局的出错标志。(标准C提供errno和perror()来支持这种方法)这种方法的缺陷:繁琐处理异常的代码和正常算法的代码交织在一起,增加了代码的复杂性,降低了可读性。程序员很容易忽视函数的返回值。printf()设置全局的出错标志降低了各个模块的独立性。12.2.2 使用signal()和 raise()函数使用C 语言标准库中的信号处理系统中的signal()函数和 raise()函数。这种方法的缺陷:复杂程序员需要理解信
6、号产生的机制并安装合适的信号处理机制。对于大型项目,不同库之间的信号可能会产生冲突。12.2.3 使用非局部的跳转Goto函数使用C标准库中非局部的跳转函数:setjmp()和longjmp()。这种方法的缺陷:增加了模块之间的耦合性上述第二和第三种方法的共同缺陷:不能调用析构函数进行善后处理,不能释放对象占用的资源。实际上不可能有效正确地从异常情况中恢复出来。12.3 C+语言的异常处理方法C+的异常处理机制的基本思想是将异常的检测与处理分离。C+中异常错误处理用try、throw和catch三个关键字实现一个异常处理的简单例子#include using namespace std;int
7、 main()int m,n;coutmn;tryif(n=0)throw 0;cout(m/n)endl;catch(int)coutDivided by 0!endl;return-1;return 0;catch语句捕获一个整型异常并处理在try代码块中包含需要监控的程序部分抛出一个整型异常12.3.1 C+程序处理异常的一般形式try/try Blockcatch(type1 arg)/exception handling for type1catch(type2 arg)/exception handling for type2/.catch(typeN arg)/exception
8、 handling for typeNtry 和 throw要监控的程序部分必须包含在try代码块中,(在try块中调用的函数也将被监控,参见)。如果try块中的程序代码发生了异常错误,那么这个异常将被抛出(使用throw)。try块中抛出的异常将被紧跟在try语句之后的catch语句捕获。另一个异常处理的简单例子int division(int x,int y);int main()int m,n;coutmn;trycoutdivision(m,n)endl;catch(int)coutDivided by 0!endl;return-1;return 0;int division(int
9、 x,int y)if(y=0)throw 0;return x/y;返回 catch语句捕获一个整型异常并处理在try代码块中包含需要监控的程序部分抛出一个整型异常catch当在try中的代码抛出一个异常时,它将被相应的catch语句捕获并处理。在try语句后面可以有一个或多个catch语句。如果在如果在catch语句中指定的数据类型与异语句中指定的数据类型与异常的类型匹配,那么这个常的类型匹配,那么这个catch语句将被语句将被执行。执行。所有其他的catch语句都将被忽略。catch(续)当异常信息被捕获时,变量arg将用来接收异常信息的值。例如:如果抛出的异常没有与之类型相匹配的cat
10、ch语句,那么将发生非正常的程序终止(abnormal program termination)。例如如果程序中抛出了一个未被处理的异常,系统将调用C+标准库中的函数terminate()。在默认情况下,函数terminate()将调用abort()函数来终止程序,但如果需要,也可以定制自己定义的函数来终止程序的执行。变量arg用来接收异常的值#include using namespace std;int main()int m,n;coutmn;tryif(n=0)throw Divided by 0!;cout(m/n)endl;catch(char*arg)coutargendl;re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 12 异常 处理
限制150内