C++异常处理

来源:互联网 发布:26式狙击步枪 知乎 编辑:程序博客网 时间:2024/04/28 12:14

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》特别版。

原创粉丝点击