C++中的异常处理
异常是程序可能检测到的运行时刻不正常的情况,最常见的异常包括:
除数为0、数组越界访问、磁盘或者光盘读写失败、无效的输入数据、内存耗尽、计算机网络不通、打印机未开等。异常总是意味着不该发生的事发生了,在程序设计过程中应该预料会发生何种异常,并进行必要的处理。
在程序运行阶段由于系统异常而产生的错误为异常错误。异常错误与程序设计错误是两码事,程序设计错误是指程序员在设计程序时由于人为因素而导致的错误;异常错误是指程序运行时由于系统异常而产生的,不是程序员的错误。
如果是程序员的设计出错误了,程序就不能通过编译检查或者运行结果不对;
如果是异常错误,程序执行时遇到异常情况就会突然终止或失控,使用户感到莫名其妙。
我们现在编写的代码都只是练习一下基础,所以感觉在程序设计中不写异常处理也没啥,但是在以后工作开发项目时可能会写大量的代码,这时异常处理至关重要。
接下来说一下C++中的异常错误吧,异常处理由3个关键字try throw catch 实现,是不是感觉和js中的异常处理有点像啊,
下面的程序主要用来处理除数为0的异常错误:
#include <iostream>
using namespace std;
int main() {
int m,n;
cout<<"Please input two integers:";
cin>>m>>n;
try{//在try代码块中包含需要监控的程序部分
if (n==0)
throw 0;
cout<< (m/n)<<endl;
}
catch(int){//catch 语句捕获一个整型异常
cout<<"Divided by 0!";
return -1;
}
}
下面的程序主要是处理从函数内部抛出的异常信 息
#include <iostream>
using namespace std;
int division(int x, int y);
int main( ) {
int m,n;
cout<<"Please input two integers:";
cin>>m>>n;
try {
cout<<division(m,n)<<endl;
}
catch(int ){
cout<<"divided by 0"<<endl;
return -1;
}
return 0;
}
int division (int x, int y){
if(y == 0)
throw 0;
return (x/y);
}
下面的程序是用户自定义运行终止函数
#include<iostream>
using namespace std;
void myterm() //自定义的运行终止函数 {
cout<<"This is my terminater."<<endl;
exit(1);
}
int main() {
try{
set_terminate(myterm);
throw "Exception ... ";
}
catch(int i){}
return 0;
}
如果在程序中抛出了一个未被处理的异常信息,系统将调用C++标准库中的terminate()函数。默认情况下,terminate()函数将调用abort()函数来终止程序。
程序员也可以自己编写终止函数,然后通过set_terminate()函数传递给异常处理模块,使系统在找不到相匹配的异常错误处理模块时调用该函数,在函数内部一般是执行必要的清除工作,释放程序中申请的动态资源,然后调用exit()函数终止当前程序。