- 1、本文档共52页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
h面向对象(异常处理吃)yh
异常处理是C++语言中重要的错误处理机制,是提高程序容错性的一种手段。异常处理主要针对程序运行时出现的各种异常情况,提供发现,捕获异常的手段,并尽量减少异常对程序运行的影响。 程序中潜在的异常问题 有的程序虽然经过编译、连接成为可以运行的程序,但在运行过程中难免会出现各种各样的问题,即使对那些所谓能“正常运行”的程序而言也是如此。 示例: #include iostream #include cmath using namespace std; int main() { float a,b,c; double x1,x2; cout请输入一元二次方程的系数a、b和c的值:endl; couta=; cina; coutb=; cinb; coutc=; cinc; x1=(-b+sqrt(b*b-4*a*c))/(2*a); x2=(-b-sqrt(b*b-4*a*c))/(2*a); cout方程的实根是:x1=x1endl; cout方程的实根是:x2=x2endl; return 0; } 从上面例子可以看出:能够“正常运行”的程序可能存在着许多潜在的“隐患”。程序运行可以检测到的一些非正常情况称为异常(exception)。 如除数为0、数组越界访问、内存空间不够、输入/输出不正常(文件找不到、输入数据类型错等)等。 异常是程序错误一种形式。 程序中的错误按性质可分为语法错误、逻辑错误和异常3种。 一般来说,异常的检测和处理要完成下列任务之一: (1)让“用户”知道程序出现了异常,并退出程序。 (2)让“用户”知道程序出现了异常,允许“用户”选择继续使用程序。 (3)在程序发生异常时,能够在不打扰“用户”的情况下继续程序的运行。 异常处理实现 C++语言异常处理机制的基本思想是将异常的检测与处理分离。当在一个函数体中检测到异常条件存在,但无法确定相应的处理方法时,将引发一个异常,并由函数直接或间接调用检测并处理这个异常。 这一基本思想用3个保留字实现:throw、try和catch。在一般情况下,被调用函数直接检测到异常条件的存在并使用throw引发一个异常(注意,C++语言的异常是由程序员控制引发的,而不是由计算机硬件或程序运行环境控制的);在上层调用函数中使用try检测函数调用是否引发异常,检测到的各种异常由catch捕获并作相应处理。 在VC++6.0环境中,为了使用异常处理机制,需要进行如下设置(默认设置): (1)选择菜单中的project。 (2)在弹出的下拉菜单中选择Setting命令,出现Settings对话框。 (3)打开C/C++选项卡。 (4)在Category中选择 C++ Language。 (5)选中Enable exception handling复选框。 在C++程序中,任何需要检测异常的语句(包括函数调用)都必须在try语句块中执行,异常必须由紧跟着try语句后面的catch语句来捕获并处理。因而,try与catch总是结合使用。 throw、 try和catch语句的一般语法如下: throw 表达式; try { //try语句块 } catch(类型1 参数1) { //针对类型1的异常处理 } catch(类型2 参数2) { //针对类型1的异常处理 } ... catch(类型n 参数n) { //针对类型1的异常处理 } 异常处理的执行过程如下: (1)控制通过正常的顺序执行到达try语句,然后执行try块内的保护段。 (2)如果在保护段执行期间没有引起异常,那么跟在try块后的catch子句就不执行,程序从异常被抛掷的try块后跟随的最后一个catch子句后面的语句继续执行下去。 (3)如果在保护段执行期间或在保护段调用的任何函数中(直接或间接的调用)有异常被抛掷,则从通过throw运算数创建的对象中创建一个异常对象(可能包含一个复制构造函数)。 (4)如果匹配的处理器未找到,则运行函数terminate将被自动调用,而函数terminate的默认功能是调用abort终止程序。 (5)如果找到了一个匹配的catch处理程序,且它通过值进行捕获,则其形参通过复制异常对象进行初始化。 示例1: #include iostream.h void main() { char *buf; try { buf=new char[512]; if(buf==0) throw 内存分配错误!; cout内存分配成功!endl; } catch(char *str) { cout异常引发:strendl; } } 示例2: #include iostream.h int fun(int); void ma
文档评论(0)