C++异常处理机制的详细介绍

1.C++异常处理的套路:

1.1 C++异常处理机制之抛出异常关键字:throw

1.2throw关键字的使用:

在哪可能出现异常就在哪里使用throw关键字抛出异常。 这个异常可以使用一个常量,字符串,或类对象,都可以来抛出。 throw + 常量、字符串、数对象 :用表示抛出一个异常。 throw抛出的异常将层层向外抛出,至少有try....catch...语句来捕获这个异常并处理这个异常。 如果最外层的主函数也不进行处理,那么主程序将自动停止。

1.3使用try{ .... } catch(exp ){..} 捕获并处理异常:

try
{
    //有可能出现的异常的代码放在try语句块中。
    //在try语句块中就可以捕获这个异常。
    //如果try语句块中的代码出现异常,即自动跳转到catch语句块进行异常处理。
}catch(被捕获的异常)
{
    //catch的语句块里是用来处理异常。
}

1.4代码实例:

#include <iostream>

using namespace std;

int my_add(int a,int b)
{
    if(b==0){
        throw -1;
    }

    return a/b;
}

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

int main()
{
    try {
        add(10,0);
    } catch (int num) {
        if(num==-1){
            cout<<"被除数不能为0"<<endl;
        }
    }

    return 0;
}

结果图:

2 C++标准异常库中常用的几个异常处理类:

 2.1异常类的例子:

#include <iostream>

using namespace std;

int my_add(int a,int b)
{
    if(b==0){
        out_of_range  err("被除数不能为0");
        throw err;
    }

    return a/b;
}

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

int main()
{
    try {
        add(10,0);
    } catch (out_of_range & err) {

            cout<<err.what()<<endl;

    }

    return 0;
}

2.2封装一个自定义异常类:

#include <iostream>

using namespace std;

class Err
{
 string err;
public:
    Err(string err)
    {
        this->err=err;
    }

    string what()
    {
        cout<<"被除数不能为0"<<endl;
    }
};


int my_add(int a,int b)
{
    if(b==0){
        Err  err("被除数不能为0");
        throw err;
    }

    return a/b;
}

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

int main()
{
    try {
        add(10,0);
    } catch (Err & err) {

            cout<<err.what()<<endl;

    }

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值