C++异常处理机制---try&throw&catch
2014-11-19 16:14
190 查看
异常处理的方法
所谓异常处理指的是对运行时出现的差错以及其他例外情况的处理。在程序设计时,应当事先充分分析程序运行时可能出现的各种意外情况,并且分别制定出相应的处理方法,这就是程序的异常处理的任务。
在一个小的程序中,可以用比较简单的方法处理异常,例如用if语句判断除数是否是0,如果是0,则输出一个出错的信息。但是在一个大的系统中,包含许多模块,每个模块又包含许多类和函数,函数之间又相互调用比较复杂。如果在每一个函数中都设置处理异常的程序段,会使程序过于异常和庞大。因此C++采取的办法是:如果在执行一个函数过程中出现异常,可以不在本函数中立刻处理,而是发出一个信息,传给它的上一级(即调用它的函数),它的上级捕捉到这个信息后进行处理;如果上级的函数也不能处理,就再传给其上一级,由上一级处理。如此逐级上送,如果到最上一级还无法处理,最后只好异常终止程序的执行。
这样做使得异常的发现和处理不必由同一函数来完成,好处是使底层的函数专门用于解决实际任务,而不必再承担处理异常的任务,以减轻底层函数的负担,而把处理异常的任务上移到某一层去处理。例如主函数中调用十几个函数,只须在主函数中设置处理异常即可,而不必在每个函数中都设置处理异常,这样可以提高效率。
C++的处理异常的机制是由3个部分组成的:检查(try),抛出(throw)和捕捉(catch)。
把需要检查的语句放在try块中,throw用来当出现异常时发出一个异常信息,而catch则用来捕捉异常信息,如果捕捉到了异常信息,就处理它。
无异常处理示例代码:
从运行结果可以看出,这个程序没有对输入的异常进行处理,因为输入的有些参数构成不了三角形,就不存在面积。
有异常处理的示例:
运行结果:
从运行结果可以看到,现在输入不能后称三角形的参数,程序就启动异常处理,主函数返回异常信息。
注意:在进行异常处理后,程序并不会自动终止,继续执行catch后面的语句,即处理异常后,并不是从出现异常点继续执行while循环。如果在try块的花括号内有10个语句,在执行第4个语句时出现异常,则处理完异常后,其余6条语句不再执行,而转到catch后面的语句继续去执行。
所谓异常处理指的是对运行时出现的差错以及其他例外情况的处理。在程序设计时,应当事先充分分析程序运行时可能出现的各种意外情况,并且分别制定出相应的处理方法,这就是程序的异常处理的任务。
在一个小的程序中,可以用比较简单的方法处理异常,例如用if语句判断除数是否是0,如果是0,则输出一个出错的信息。但是在一个大的系统中,包含许多模块,每个模块又包含许多类和函数,函数之间又相互调用比较复杂。如果在每一个函数中都设置处理异常的程序段,会使程序过于异常和庞大。因此C++采取的办法是:如果在执行一个函数过程中出现异常,可以不在本函数中立刻处理,而是发出一个信息,传给它的上一级(即调用它的函数),它的上级捕捉到这个信息后进行处理;如果上级的函数也不能处理,就再传给其上一级,由上一级处理。如此逐级上送,如果到最上一级还无法处理,最后只好异常终止程序的执行。
这样做使得异常的发现和处理不必由同一函数来完成,好处是使底层的函数专门用于解决实际任务,而不必再承担处理异常的任务,以减轻底层函数的负担,而把处理异常的任务上移到某一层去处理。例如主函数中调用十几个函数,只须在主函数中设置处理异常即可,而不必在每个函数中都设置处理异常,这样可以提高效率。
C++的处理异常的机制是由3个部分组成的:检查(try),抛出(throw)和捕捉(catch)。
把需要检查的语句放在try块中,throw用来当出现异常时发出一个异常信息,而catch则用来捕捉异常信息,如果捕捉到了异常信息,就处理它。
无异常处理示例代码:
//计算三角形的面积 //没有异常处理 #include<iostream> #include<cmath> using namespace std; int main() { double triangle(double,double,double); double a,b,c; cin>>a>>b>>c; while(a>0&&b>0&&c>0) { cout<<triangle(a,b,c)<<endl; cin>>a>>b>>c; } system("pause"); return 0; } double triangle(double a,double b,double c) { double area; double s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); return area; }
从运行结果可以看出,这个程序没有对输入的异常进行处理,因为输入的有些参数构成不了三角形,就不存在面积。
有异常处理的示例:
//计算三角形面积 //有异常处理 #include<iostream> #include<cmath> using namespace std; int main() { double triangle(double,double,double); double a,b,c; cin>>a>>b>>c; try { while(a>0&&b>0&&c>0) { cout<<triangle(a,b,c)<<endl; cin>>a>>b>>c; } } catch(double) { cout<<"a="<<a<<",b="<<b<<",c="<<c<<",this is not a triangle!"<<endl; } system("pause"); return 0; } double triangle(double a,double b,double c) { double s=(a+b+c)/2; if(a+b<=c||a+c<=b||b+c<=a) throw a; return sqrt(s*(s-a)*(s-b)*(s-c)); }
运行结果:
从运行结果可以看到,现在输入不能后称三角形的参数,程序就启动异常处理,主函数返回异常信息。
注意:在进行异常处理后,程序并不会自动终止,继续执行catch后面的语句,即处理异常后,并不是从出现异常点继续执行while循环。如果在try块的花括号内有10个语句,在执行第4个语句时出现异常,则处理完异常后,其余6条语句不再执行,而转到catch后面的语句继续去执行。
相关文章推荐
- c++异常处理机制 (try—throw—catch的使用)
- Java异常机制try、catch、finally、throw、throws五个关键字。
- java:异常处理机制 try-catch-throw-finally
- C++异常处理: try,catch,throw,finally的用法
- C++异常处理 try,catch,throw,finally的用法
- [转贴]从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- 异常概念和处理机制,try-catch-finally,throw和throws,自定义异常
- JavaScript 错误 – Throw、Try 和 Catch
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- 异常概念和处理机制,try-catch-finally,throw和throws,自定义异常
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- C# 中异常抛出捕获机制--throw / try,catch,finally
- JAVA异常处理机制的个人理解(try catch throw finally)
- C++异常处理try throw catch
- 异常:编译时异常和运行时异常&throw和throws区别try-catch的应用
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- 从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- java的异常机制五个关键字:throw try catch finally throw
- C语言错误处理方法、C++异常处理方法(throw, try, catch)简介
- JAVA中异常抛出、捕获机制—try catch throw