这周三海康实习入职,在此之前补了一下异常处理

异常处理这是我在寒假期间看到过的一种c++机制,但是当时并未重视它,最近在网上看到了说企业开发中异常处理的重要性,故昨天看了些有关资料。
首先介绍一下异常处理机制。在程序中我们会碰到一些情况,比如除数为0,年龄键入为负数等。虽然可以用return语句实现函数的返回,但在c++中,它给我们提供了一种更有效的解决办法。即异常处理机制。它可以使异常的引发和异常的处理不必在同一个函数中。return仅仅可以返回到上一层函数,但是异常可以实现函数的跳层。
throw、try、和catch:
throw用于创建一个异常对象并抛出。此时需要有对应类型的catch去接,下面给出除数为0的基本异常处理代码:

#include "iostream"
using namespace std;
void divide(int x,int y)
{
    if(0==y)
        throw x;
    else
    {
        cout<<x/y<<endl;
    }
    
}
int main()
{
    try{
        divide(10,0);//第二个参数为0,引发异常,触发if语句抛出被除数
    }
    catch(int z)
    {
        cout<<z<<"can not be divide by 0"<<endl;//catch一个int型的异常对象,并做出处理
    }
    catch(...)//catch(...)用于捕捉其他类型的异常对象,该语句只能写在最后一个catch中
    {
        cout<<"error"<<endl;
    }
    cout<<"Hello"<<endl;
    return 0;
}

上述代码中,介绍try的用法。
在我的理解中,任何可能触发异常的语句均应该写在一个try块中,其后接catch语句。在程序运行时,按正常顺序运行程序,若异常没触发,则自动忽略catch语句。
注意点
抛出异常时,必须有对应的catch语句接这个异常,否则会报错。

#include "iostream"
using namespace std;
void divide(int x,int y)
{
    if(0==y)
        throw x;
    else
    {
        cout<<x/y<<endl;
    }
    
}
int main()
{
    try{
        divide(10,0);
    }
    /*catch(int z)
    {
        cout<<z<<"can not be divide by 0"<<endl;
    }
    catch(...)
    {
        cout<<"error"<<endl;
    }*/
    cout<<"Hello"<<endl;
    return 0;
}

如以上代码中,将catch语句注释,则出现程序无法运行的情况,因为缺少相应的异常处理方法。
异常的抛出和处理可以跨函数

#include "iostream"
using namespace std;
void divide(int x,int y)
{
    if(0==y)
        throw x;
    else
    {
        cout<<x/y<<endl;
    }
    
}
void my_divide()
{
    divide(10,0);//引发异常
}
int main()
{
    try
    {
        my_divide();//调用函数my_divide()
    }
    catch(int e)
    {
        cout<<"error "<<endl;
    }
    cout<<"Hello"<<endl;
    return 0;
}

接到异常后可以选择不处理,但是应该继续抛出:

#include "iostream"
using namespace std;
void divide(int x,int y)
{
    if(0==y)
        throw x;
    else
    {
        cout<<x/y<<endl;
    }
    
}
void my_divide()
{
    try{
     divide(10,0);
    }
    catch(int e)
    {
        throw e;//接到异常但不处理,此时选择继续抛出该异常
    }
}
int main()
{
    try
    {
        my_divide();
    }
    catch(int e)
    {
        cout<<"error "<<endl;//此处处理异常。
    }
    cout<<"Hello"<<endl;
    return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值