异常处理

1.  异常的概念

  

程序的错误通常包括:语法错误、逻辑错误、运行异常。

       语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译、连接时由编译器指出。

       逻辑错误是指程序能顺利运行,但是没有实现预期的功能,这类错误通过调试与测试发现。

       运行异常(exception)是指程序在运行的过程中由于意外的结果,运行环境问题造成程序异常终止,如内存空间不足、打开文件不存在、文件读些不成功、执行了除0操作等。

       导致程序运行异常虽然是无法避免,但是可以预料,为了保证程序的健壮性,必须要在程序中对运行异常进行预见性处理,对运行异常进行预见性处理称为异常处理。

处理异常的方法很多,其中最直接的办法是调用C++中的exit()或abort()函数终止程序的执行,exit() 与abort()函数原型在头文件Cstdlib中声明,两者的区别是exit()在中止程序运行前,会关闭被程序打开的文件、调用全局和static类型对象的析构函数等;而abort()什么都不做。使用exit()与abort()来处理异常显得很机械,有的异常需要进行更复杂的处理。

      以往的异常捕获方式是利用if语句检查调用函数的返回值,或者在函数调用之前检查,如在求两个数的商时就需要在函数前检查除数是否为0来捕获、防止异常:

  float quotient(int a, int b) { return a/(float)b; }

          …

       cin>>a>>b;

       if (b==0) //捕获异常

  cout<<"Divide 0 !"<<endl;

       else

  cout<<a<<"/"<<b<<"="<<quotient(a,b); 

这种处理机制有如下缺点:

       (1) 每使用quotient()一次, 就必须利用if语句检查一次,使得程序对正常执行过程的描述与对异常的处理交织在一起,程序的易读性不好。

       (2) 若异常信息在函数中返回,会破坏程序的逻辑性。如:原来没有返回值的函数,要定义成返回值;对原来有返回值的函数无法定义异常信息返回;象构造函数、析构函数这类由程序自动调用,又没有返回值的特殊函数,就没有办法利用返回值返回异常。

       为此,C++提供了异常处理解决方案。 

程序的错误通常包括:语法错误、逻辑错误、运行异常。

       语法错误指书写的程序语句不合乎编译器的语法规则,这种错误在编译、连接时由编译器指出。

       逻辑错误是指程序能顺利运行,但是没有实现预期的功能,这类错误通过调试与测试发现。

       运行异常(exception是指程序在运行的过程中由于意外的结果,运行环境问题造成程序异常终止,如内存空间不足、打开文件不存在、文件读些不成功、执行了除0操作等。

       导致程序运行异常虽然是无法避免,但是可以预料,为了保证程序的健壮性,必须要在程序中对运行异常进行预见性处理,对运行异常进行预见性处理称为异常处理

 

 

处理异常的方法很多,其中最直接的办法是调用C++中的exit()abort()函数终止程序的执行,exit() abort()函数原型在头文件Cstdlib中声明,两者的区别是exit()在中止程序运行前,会关闭被程序打开的文件、调用全局和static类型对象的析构函数等;而abort()什么都不做。使用exit()abort()来处理异常显得很机械,有的异常需要进行更复杂的处理。

      以往的异常捕获方式是利用if语句检查调用函数的返回值,或者在函数调用之前检查,如在求两个数的商时就需要在函数前检查除数是否为0来捕获、防止异常:

  float quotient(int a, int b) { return a/(float)b; }

          …

       cin>>a>>b;

       if (b==0) //捕获异常

  cout<<"Divide 0 !"<<endl;

       else

  cout<<a<<"/"<<b<<"="<<quotient(a,b); 

 

 

这种处理机制有如下缺点:

       (1) 每使用quotient()一次, 就必须利用if语句检查一次,使得程序对正常执行过程的描述与对异常的处理交织在一起,程序的易读性不好。

       (2) 若异常信息在函数中返回,会破坏程序的逻辑性。如:原来没有返回值的函数,要定义成返回值;对原来有返回值的函数无法定义异常信息返回;象构造函数、析构函数这类由程序自动调用,又没有返回值的特殊函数,就没有办法利用返回值返回异常。

       为此,C++提供了异常处理解决方案。

转载于:https://www.cnblogs.com/lzbblog/archive/2010/06/11/1756285.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值