C++异常处理

6.1      基础

Try-throw-catch的基本用法如下代码段,也即thorw什么类型的异常,就捕捉到什么类型的异常,并进行什么类型的处理。注意,catch是要按顺序排列的,某一类型异常派生自另一类型异常,则另一类型异常一定要放在前者后面,否则异常不会被前者处理。

    int i = 0;

 

    cin >> i ;

    

    try

    {

        switch(i)

        {

        case 1:

             {

                  throw(1);

             }

             break;

        case 2:

             {

                  throw(1.0);

             }

             break;

        case 3:

             {

                  throw('a');

             }

             break;

        default:

             break;

        }

    }

    catch(int)

    {

        cout << "int" << endl;

    }

    catch(double)

    {

        cout << "double" << endl;

    }

    catch(char)

    {

        cout << "char" << endl;

    }

catch()表示处理任何错误。

6.2      Catch块的触发

Try

{

Throw e();

}

Catch(h)

{

//……

}

当以下情况会触发catch块:

1)  eh是相同类型。

2)  he公共基类,也即e是直接public继承或是间接public继承h

直接public继承:

Class base;

Class a:public base;

a直接public继承base

间接public继承:

Class base;

Class a:public base;

Class aa:public a;

aa间接public继承。

3)  he是指针类型,且1)2)对它们所引用的类型成立。

4)  he是引用类型,且1)2)对它们所引用的类型成立。(《c++ programming language》中原意是“h是引用类型,且1)2)对它们所引用的类型成立”,经测试,发觉此话有误。

 

6.3      重新抛出异常

    catch块中throw一个不带参数的异常出来,重新抛出的就是原来捕捉的那个异常。

 

6.4      资源管理的异常

    一些操作,诸如文件操作,在文件openclose前如有异常也可捕捉进行处理。

 

6.5      构造函数里的异常与初始化器的异常

      代码可以分别如下:

classA::classA()

{

      Try

{

//…

}

Catch(s)

{

//…

}

}

classA::classA()

try

{

:data(d)

{

}

}

Catch(s)

{

//…

}

 

参考:《c++ programming language》特别版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值