C++异常处理机制---try&throw&catch
来源:互联网 发布:深入浅出sql 下载 编辑:程序博客网 时间:2024/05/12 13:45
异常处理的方法
在一个小的程序中,可以用比较简单的方法处理异常,例如用if语句判断除数是否是0,如果是0,则输出一个出错的信息。但是在一个大的系统中,包含许多模块,每个模块又包含许多类和函数,函数之间又相互调用比较复杂。如果在每一个函数中都设置处理异常的程序段,会使程序过于异常和庞大。因此C++采取的办法是:如果在执行一个函数过程中出现异常,可以不在本函数中立刻处理,而是发出一个信息,传给它的上一级(即调用它的函数),它的上级捕捉到这个信息后进行处理;如果上级的函数也不能处理,就再传给其上一级,由上一级处理。如此逐级上送,如果到最上一级还无法处理,最后只好异常终止程序的执行。
这样做使得异常的发现和处理不必由同一函数来完成,好处是使底层的函数专门用于解决实际任务,而不必再承担处理异常的任务,以减轻底层函数的负担,而把处理异常的任务上移到某一层去处理。例如主函数中调用十几个函数,只须在主函数中设置处理异常即可,而不必在每个函数中都设置处理异常,这样可以提高效率。
C++的处理异常的机制是由3个部分组成的:检查(try),抛出(throw)和捕捉(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后面的语句继续去执行。
0 0
- C++异常处理机制---try&throw&catch
- 【c#】异常处理:try catch throw
- try catch throw异常处理
- 异常处理 throw try catch
- 异常处理 try catch throw
- java:异常处理机制 try-catch-throw-finally
- 异常机制 :try、catch、 finally 、throw 、throws
- C++处理异常 try,catch,throw
- C++ try catch() throw 异常处理
- C++ try catch() throw 异常处理
- C++ try catch() throw 异常处理
- C++处理异常 try,catch,throw
- C++处理异常 try,catch,throw
- C++语言处理异常 try catch throw
- C++处理异常 try,catch,throw
- C++中异常处理try-throw-catch
- C++异常处理try throw catch
- php异常处理--try,throw,catch
- android 之popupWindow 在指定位置上的显示
- oracle数据库导入导出命令
- php爬取网页
- RS232
- C++ Primer 读书笔记之动态内存
- C++异常处理机制---try&throw&catch
- 接口测试学习(一)
- opacity渐变功能
- 区域的个数(坐标离散化)
- [Swift]结构体和类的基本概念
- iOS 获取屏幕的属性和宽度的方法
- 十大常用编程算法
- cocos2dx3.2 判断音效是否播放
- 通过C# 添加站点到IE信任列表