C++函数的异常处理,函数体怎么没有关键字throw?它是如何捕获异常的? 10

 我来答
濯楚云PJ
2019-06-17 · TA获得超过3931个赞
知道大有可为答主
回答量:6939
采纳率:84%
帮助的人:448万
展开全部


throw

【抛出异常】(也称为抛弃异常)即检测是否产生异常,在C++中,其采用throw语句来实现,如果检测到产生异常,则抛出异常。该语句的格式为:
throw 表达式;
    如果在try语句块的程序段中(包括在其中调用的函数)发现了异常,且抛弃了该异常,则这个异常就可以被try语句块后的某个catch语句所捕获并处理,捕获和处理的条件是被抛弃的异常的类型与catch语句的异常类型相匹配。由于C++使用数据类型来区分不同的异常,因此在判断异常时,throw语句中的表达式的值就没有实际意义,而表达式的类型就特别重要。


【范例】处理除数为0的异常。该范例将上述除数为0的异常可以用try/catch语句来捕获异常,并使用throw语句来抛出异常,从而实现异常处理,实现代码如代码清单20-2所示。
代码清单20-2

  #include<iostream.h>                                 //包含头文件
    #include<stdlib.h>
    double fuc(double x, double y)                        //定义函数
    {
        if(y==0)
        {
            throw y;                                    //除数为0,抛出异常
        }
       return x/y;                                    //否则返回两个数的商
    }
    void main()
    {
        double res;
        try                                            //定义异常
        {
            res=fuc(2,3);
            cout<<"The result of x/y is : "<<res<<endl;
            res=fuc(4,0);                                //出现异常
        }
        catch(double)                                    //捕获并处理异常
        {
           cerr<<"error of dividing zero.\n";
            exit(1);                                    //异常退出程序
        }
    }


【运行结果】在Visual C++中新建一个【C++ Source File】文件,输入上述的代码,编译无误后运行。
【范例解析】上述代码中,在主函数main()的第14~19行中使用了try语句定义异常,其中包含3条有可能出现异常的语句,它们为调用两个数相除的函数。在代码的第20~24行定义了异常处理,即捕获异常后执行该段代码中的语句。此外,在函数fuc()的代码5~8行通过throw语句抛出异常。




追问
粘贴狗
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式