C++异常处理--Learning

一、异常处理简介

  C++中,异常处理一般用3个保留字实现:throw、try和catch。当被调用的函数检测到异常条件时,立即使用throw引发一个异常。在上一层调用函数中使用try检测函数调用是否引发了异常,被检测到的异常由catch捕获并处理。

二、try、catch语句

  需要检测异常的程序段(如函数调用)须放在try语句中执行,称之为保护代码。异常由catch语句捕获并处理。形式为:

 1 try
 2 {...}
 3 catch(<类型1><参数1>)
 4 {...}
 5 ...
 6 ...
 7 ...
 8 catch(<类型n><参数n>)
 9 {...}
10 catch(...)
11 {...}

  一个try语句可与多个catch语句相联系。若某个catch语句的参数类型与引发异常的信息数据类型相匹配,则执行该catch语句的异常处理,此时由throw语句抛出的异常信息传递给catch语句中的参数。最后的catch(...)捕获所有类型的异常。其中的省略号可与任何数据类型匹配。

三、throw语句

  引发异常的throw语句必须在try语句中,或由try语句直接(间接)调用的函数体执行。一般形式为:

throw exception;

exception为一个异常值,可以是任意类型的变量、对象或值。

 四、异常处理的实现

  ①将可能发生异常的程序段放在try中;

  ②控制通过正常的顺序执行到达try语句,然后执行try中的保护代码;

  ③在保护代码执行过程中:

    若没有引发异常,那跟在try后的catch不会执行。程序会在try后跟随的最后一个catch子句后面的语句继续执行下去。

    若发生异常,则会通过throw创建一个异常对象并抛出。

使用多个catch语句时:

Ⅰ、catch按照在try语句后出现的顺序被检查;

Ⅱ、被匹配的catch子句将捕获并处理异常;

Ⅲ、若没有找到匹配的catch语句,则运行函数terminate将被自动调用(默认功能是调用abort终止程序)。

五、例子

 1 //处理除数为0的异常
 2 #include <iostream>
 3 using namespace std;
 4 int Div(int x,int y)
 5 {
 6     if (y==0)
 7     {
 8         throw y;
 9     }
10     return x/y;
11 }
12 void main()
13 {
14     int a,b;
15     cout<<"请输入两个正整数:"<<endl;
16     cin>>a>>b;
17     try
18     {
19         int c=Div(a,b);
20         cout<<a<<"/"<<b<<"="<<c<<endl;
21     }
22     catch (int)
23     {
24         cout<<"除数为零。
";    
25     }
26 
27 }

结果:

 

原文地址:https://www.cnblogs.com/f59130/p/3355706.html