异常和异常处理
程序可能遇到各种错误,比如:
- 所需的磁盘文件被移动或删除,导致无法打开
- 内存不足,致使通过new无法获取所需要的动态空间
- 用户程序提供了不恰当的数据
这时,程序的正常运行无法继续,此时就会发生异常(exception)。
try-throw-catch异常处理机制
关键字try标识一个可能出现异常的程序块
关键字throw在try块中“抛出”异常——转入处理异常
关键字catch标识处理异常的程序块,“捕获”异常
#include<iostream>
using namespace std;
int main(){
try {//try程序块是“受监控的程序块”
int i1,i2;
char op;
cin>>i1>>i2>>op;
if(op=='/'){
if(i2==0){
throw "Divided by 0!";//抛出(char*类型)异常
}
...
}
else{
if(op=='%'){
if(i2==0){
throw i1;//抛出(int)异常
}
...
}
else{
...
}
}
}
catch(int i){//捕获int型异常的catch块
...
}
catch(char* str){
...
}
...//所有处理结束后,输出信息
}
C++系统对于异常处理的支持
- C++系统提供的异常类及用户定义的异常类
- 捕获系统函数(包括运算符)抛出的异常
多级多重异常捕获
- 多重异常的抛出与捕获——try块中可能抛出不同类型的异常,其后有多个catch块分别进行处理
- 多级异常处理——本层catch不能处理的异常,或需要由上层调用程序处理的异常,可以抛出到上层调用程序。因此在函数的调用——返回机制中,应包含异常抛出的信息。