zoukankan      html  css  js  c++  java
  • 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 }

    结果:

     

  • 相关阅读:
    mysql 写计数器需要注意的问题
    CSS3倒影效果
    svg path 解析
    图论-深度优先和广度优先(均非递归)
    线段树---HDU1166敌兵布阵
    线段树入门---给定多个线段求点的出现个数
    NYOJ-129 并查集
    并查集(基础)
    二叉搜索树
    堆及堆排序
  • 原文地址:https://www.cnblogs.com/f59130/p/3355706.html
Copyright © 2011-2022 走看看