异常处理(try,throw,catch)
1、异常错误和程序设计错误的区别
在这里,我们首先区分一下异常错误和程序设计错误:
- 异常错误:在程序运行阶段由于系统异常原因而产生的错误。如果不处理异常错误。程序执行时遇到异常情况就会突然停止或者失控,使用户感到莫名其妙。
- 程序设计错误:指程序员在设计时由于人为因素所产生的错误。如果不处理程序设计错误,程序就不能通过编译检查或者运行结果不对。
2、C++语言的异常处理方法
异常处理的功能就是将程序的运行过程从异常错误中恢复出来继续执行或者显示提示信息,使用户明白遇到了何种异常,不得不停止执行。
C++提供了一种异常处理机制,其基本思想是将异常的检测和处理分离开来,采用try,throw,catch三个关键词实现,其中throw用来抛出异常,try…catch用来捕获异常并进行异常处理。
C++处理异常之一般形式
try{
//try Block
}
catch(type1 arg){
//exception handling for type1
}
...
catch(typen arg){
//exception handling for typen
}
这里我们需要介绍一下try…catch 语句的执行过程:
- 第一种情况:执行 try 块中的语句,如果执行的过程中,没有执行throw语句抛出异常,那么执行完后就执行最后一个 catch 块后面的语句,也就是说所有 catch 块中的语句都被跳过,不去执行
- 第二种情况:如果 try 块执行的过程中执行throw语句拋出异常,那么拋出异常后立即跳转到第一个“异常类型”和拋出的异常类型匹配的 catch 块中执行,执行完后再跳转到最后一个 catch 块后面继续执行。
下面我们用除法运算来演示一下异常处理的一般形式,在执行本程序时,如果出现除数为0的情况,包含在try代码块中的throw语句抛出一个整型异常0,紧跟在try后面的throw语句捕获到这个整型异常并进行相应的处理。代码如下所示:
#include<iostream>
int division(double a,double b);
using namespace std;
int main(){
int a,b;
cout<<"请输入被除数和除数:";
cin>>a>>b;
division(a,b);
return 0;
}
int division(double a,double b){
try{
if(b==0) throw 0;
cout<<endl<<a<<"/"<<b<<"="<<(a/b)<<endl;