欢迎来到天天文库
浏览记录
ID:39899848
大小:306.55 KB
页数:42页
时间:2019-07-14
《c面向对象程序设计第12章异常处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《C++面向对象程序设计》第1章C++概述第2章类和对象第3章面向对象程序设计概述第4章进一步学习类和对象第5章堆与复制构造函数第6章继承性:派生类第7章运算符重载第8章虚函数和多态性第9章模板第10章类库和C++的标准模板库STL第11章输入输出流第12章异常处理第12章异常处理12.1异常处理的概念12.2C语言处理异常的方法12.3C++语言的异常处理方法12.4异常类和C++标准异常12.1异常处理的概念异常(Exception)是程序可能检测到的运行时刻不正常的情况。最常见的异常包括除数为0,数组越界访问,磁盘或者光盘读写失败,无效数据,内存耗尽,网络不通等。异常总是代表着
2、某些不该发生的事情发生了异常错误在程序运行阶段由于系统异常原因而产生的错误称为异常错误异常错误与程序设计错误是两码事异常错误与程序设计错误程序设计错误是指程序员在设计程序时由于人为因素所产生的错误。异常错误是在程序运行时由于系统异常原因而产生的,不是程序员的失误所致。如果不排除程序设计错误,程序就不能通过编译检查或运行结果不对。如果不处理异常错误,程序执行时遇到异常情况就会突然终止或失控,使用户感到莫名其妙。一个异常错误的例子#include#includeusingnamespacestd;intmain(intargc,char**argv)
3、{ifstreamsource(argv[1]);//打开文件charline[128];while(!source.eof()){source.getline(line,sizeof(line));cout<4、.robustness鍵壯性,穩固性,穩健性,堅固性异常处理的例子intmain(intargc,char**argv){ifstreamsource(argv[1]);//打开文件charline[128];if(source.fail()){cout<<"erroropeningthefile"<5、2.1检查函数的返回值来发现异常错误12.2.2使用signal()和raise()函数12.2.3使用非局部的跳转Goto函数12.2.1检查函数的返回值来发现异常错误从函数返回出错信息,如果函数的返回值不便于返回出错信息,就设置一个全局的出错标志。(标准C提供errno和perror()来支持这种方法)这种方法的缺陷:繁琐处理异常的代码和正常算法的代码交织在一起,增加了代码的复杂性,降低了可读性。程序员很容易忽视函数的返回值。printf()设置全局的出错标志降低了各个模块的独立性。12.2.2使用signal()和raise()函数使用C语言标准库中的信号处理系统中的signa6、l()函数和raise()函数。这种方法的缺陷:复杂程序员需要理解信号产生的机制并安装合适的信号处理机制。对于大型项目,不同库之间的信号可能会产生冲突。12.2.3使用非局部的跳转Goto函数使用C标准库中非局部的跳转函数:setjmp()和longjmp()。这种方法的缺陷:增加了模块之间的耦合性上述第二和第三种方法的共同缺陷:不能调用析构函数进行善后处理,不能释放对象占用的资源。实际上不可能有效正确地从异常情况中恢复出来。12.3C++语言的异常处理方法C++的异常处理机制的基本思想是将异常的检测与处理分离。C++中异常错误处理用try、throw和catch三个关键字实现一个异7、常处理的简单例子#includeusingnamespacestd;intmain(){intm,n;cout<<"Pleaseinputtwointegers:";cin>>m>>n;try{if(n==0)throw0;cout<<(m/n)<
4、.robustness鍵壯性,穩固性,穩健性,堅固性异常处理的例子intmain(intargc,char**argv){ifstreamsource(argv[1]);//打开文件charline[128];if(source.fail()){cout<<"erroropeningthefile"<5、2.1检查函数的返回值来发现异常错误12.2.2使用signal()和raise()函数12.2.3使用非局部的跳转Goto函数12.2.1检查函数的返回值来发现异常错误从函数返回出错信息,如果函数的返回值不便于返回出错信息,就设置一个全局的出错标志。(标准C提供errno和perror()来支持这种方法)这种方法的缺陷:繁琐处理异常的代码和正常算法的代码交织在一起,增加了代码的复杂性,降低了可读性。程序员很容易忽视函数的返回值。printf()设置全局的出错标志降低了各个模块的独立性。12.2.2使用signal()和raise()函数使用C语言标准库中的信号处理系统中的signa6、l()函数和raise()函数。这种方法的缺陷:复杂程序员需要理解信号产生的机制并安装合适的信号处理机制。对于大型项目,不同库之间的信号可能会产生冲突。12.2.3使用非局部的跳转Goto函数使用C标准库中非局部的跳转函数:setjmp()和longjmp()。这种方法的缺陷:增加了模块之间的耦合性上述第二和第三种方法的共同缺陷:不能调用析构函数进行善后处理,不能释放对象占用的资源。实际上不可能有效正确地从异常情况中恢复出来。12.3C++语言的异常处理方法C++的异常处理机制的基本思想是将异常的检测与处理分离。C++中异常错误处理用try、throw和catch三个关键字实现一个异7、常处理的简单例子#includeusingnamespacestd;intmain(){intm,n;cout<<"Pleaseinputtwointegers:";cin>>m>>n;try{if(n==0)throw0;cout<<(m/n)<
5、2.1检查函数的返回值来发现异常错误12.2.2使用signal()和raise()函数12.2.3使用非局部的跳转Goto函数12.2.1检查函数的返回值来发现异常错误从函数返回出错信息,如果函数的返回值不便于返回出错信息,就设置一个全局的出错标志。(标准C提供errno和perror()来支持这种方法)这种方法的缺陷:繁琐处理异常的代码和正常算法的代码交织在一起,增加了代码的复杂性,降低了可读性。程序员很容易忽视函数的返回值。printf()设置全局的出错标志降低了各个模块的独立性。12.2.2使用signal()和raise()函数使用C语言标准库中的信号处理系统中的signa
6、l()函数和raise()函数。这种方法的缺陷:复杂程序员需要理解信号产生的机制并安装合适的信号处理机制。对于大型项目,不同库之间的信号可能会产生冲突。12.2.3使用非局部的跳转Goto函数使用C标准库中非局部的跳转函数:setjmp()和longjmp()。这种方法的缺陷:增加了模块之间的耦合性上述第二和第三种方法的共同缺陷:不能调用析构函数进行善后处理,不能释放对象占用的资源。实际上不可能有效正确地从异常情况中恢复出来。12.3C++语言的异常处理方法C++的异常处理机制的基本思想是将异常的检测与处理分离。C++中异常错误处理用try、throw和catch三个关键字实现一个异
7、常处理的简单例子#includeusingnamespacestd;intmain(){intm,n;cout<<"Pleaseinputtwointegers:";cin>>m>>n;try{if(n==0)throw0;cout<<(m/n)<
此文档下载收益归作者所有