C++异常捕获与处理
1.异常处理1.1什么是异常处理1.2抛出异常1.3异常处理
2.C++实现异常处理的3个关键字2.1 throw、try、catch2.2寻找处理代码的过程(匹配catch的过程)
3.C++定义的标准异常类3.1使用C++的标准异常类实例
4.如何定义和使用自己的异常类5.总结
1.异常处理
1.1什么是异常处理
异常是指再程序正常运行的过程中的发生的反常行为,比如说遇到意外的用户输入情况。
1.2抛出异常
当程序的某部分监测到一个它无法处理的问题时,它首先应该发出某种信号,以表明它遇到了无法解决的问题,并且它只负责报告异常,至于程序会如何处理,不是它的任务。
1.3异常处理
一般而言,如果程序中有监测异常的代码,通常就会有处理异常的代码。比如说引发程序异常的问题是输入无效,那么处理异常的代码就可以是提示用户重新输入真确的数据。
2.C++实现异常处理的3个关键字
2.1 throw、try、catch
用“throw表达式”来抛出异常,用法是“throw + 表达式 ;”。如:
throw “the input is error.”;//抛出const char* 的异常类型throw 1;//抛出int型的异常类型throw runtime_error(“Data must refer to ISBN”); //抛出runtime_error类类型的异常类型,其中runtime_error是一个标准的异常处理类
用“try语句块”来处理异常
try语句块中的program-statements放置正常运行的程序,同时它也是可能出问题的程序。一旦有异常发生,就用throw表达式来抛出异常。这里注意,try中声明的变量在外部无法访问,catch也不行。catch的语句块(handler-statements)就是放置异常处理代码的地方。这里提个问题:catch是怎样匹配throw抛出的异常的呢?答案就是catch通过括号()中的异常声明(exception-declaration)来匹配。当throw抛出的是int型的异常类型,则用int声明一个变量来匹配。如下:当你输入一个
cerr
cin >> a;
if (a
getInput();
}
catch (int i){
cerr
if (_b == 0) throw "输入的分母是0。"; //抛出const char* 类型的异常
return _a / _b;
}
int main()
{
double numerator, denominator;//numerator:分子。denominator:分母
while (cin >> numerator >> denominator){//用户输入分子分母
try{
double quotient = calQuotient(numerator, denominator);//calQuotient()函数是计算商的函数
std::cout
//bad_alloc异常类实例
try {
char * p = new char[0x7fffffff]; //无法分配这么多空间,会抛出异常
}
catch (bad_alloc e) {
cerr
cerr }
MyException(const char* _c):c(_c){}
virtual ~MyException(){}
//覆写what成员函数
const char* what() throw()
{
if (c == nullptr)
return "MyException() error catch!";
return c;
}
private:
const char * c;
};
int main()
{
//默认参数-构造一个MyException类
try{
throw MyException();
}
catch (MyException & myexp){
cerr
cerr |