C++异常处理机制

throw

        抛出的这个异常对象可以是一个常量,对象,常量字符串,右值临时对象也可以。

        throw关键字抛出异常是层层抛出,如果每一层都没有对这个异常进行处理,那么最终会在main函数中被抛出。

        如果main函数也没有进行处理,程序将自动终止。

try...catch...

try
{
    //try语句块,放有可能出现异常函数。
    //用来捕获有可能抛出的异常。

}catch(异常对象表达式){
    //catch语句块中,用来处理捕获的导常。

}catch (exception e) {    //捕获其他所有异常
    //catch语句块中,用来处理捕获的导常。
}

综合练习

        可自定义错误类:

#include <iostream>
using namespace std;

//可自定义错误
class Error
{
private:
    string err;
public:
    Error(string err)
    {
        this->err = err;
    }
    string what()
    {
        return this->err;
    }
};

        自定义普通函数用于抛出异常:

float my_div(int a, int b)
{
    Error *e1 = new Error("??"); //用于抛出,触发"其他错误"
    if(b == 0)
    {
        throw -1; //可抛出常量
    }
    if( b == -10 )
    {
        throw "除数为-10"; //可抛出字符串
    }
    if (b == -5)
    {
        throw Error("除数不可为-5"); //可抛出临时对象
    }
    if (b == -20)
    {
        throw e1; //抛出对象
    }
    return a / b;
}

float my_add(int a, int b)
{
    return a + b + my_div(a,b);
}

        主函数验证:

int main()
{
    try {
        cout << my_add(10,-20) << endl;

    }catch (int e){ //接收int型错误
        cout << "除数是0" << endl;

    } catch (Error& e) { //接收 临时对象型 错误
        cout << e.what() << endl;

    } catch (const char* e){ //接收字符串错误
        cout << e << endl;

    }catch (exception){ //若没有设置异常相对应的接收,此语句可在异常抛出后自动提示,与catch(...)同用则无效

    }catch (...){ //接收其他所有错误(我这里接收类对象e1测试)
        cout << "其他错误" << endl;
    }

    cout << "程序继续" << endl;
    return 0;
}

        运行结果:

        my_add(10, 0)

        

        my_add(10, -10)

        

         my_add(10, -5)

         

         my_add(10, -20)

         

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值