zoukankan      html  css  js  c++  java
  • C++学习笔记56:异常处理

    异常处理

    异常处理的语法

    抛掷异常的程序段

    throw表达式;

    捕获并处理异常的程序段

    try

    复合语句

    catch(异常声明)

    复合语句

    catch(异常声明)

    复合语句

    注意:如果匹配的处理器没有找到,则库函数terminate将被自动调用,其缺省默认自动调用abort终止程序的执行;

    处理除零的异常:

    #include <iostream>
    using namespace std;
    
    int divide(int x, int y)
    {
        if (y == 0)
        {
            throw x;
        }
        return x / y;
    }
    
    int main()
    {
        try
        {
            cout << "5/2 = " << divide(5, 2) << endl;
            cout << "8/0 =" << divide(8, 0) << endl;
        }
        catch (int e)
        {
            cout << e << "is divided by zero!" << endl;
        }
        cout << "that's is ok!" << endl;
        return 0;
    }

    异常接口的声明

    1.一个函数显示声明可能抛出的异常,有利于函数的调用者为异常处理做好准备;

    2.可以在函数的声明中列出这个函数可能抛掷的所有异常类型

    例如:

    void func() throw(A,B,C,D)

    若无异常接口声明,则此函数可以抛出任何类型的异常

    不抛掷任何类型异常的函数声明如下:

    void fun() throw();

    异常处理的思想与程序实现

    异常处理中的构造与析构

    自动的析构

    找到一个匹配的catch异常处理后

    初始化异常参数;

    将从对应的try块开始到异常被抛掷处之间构造(且尚未析构)的所有自动对象进行析构;

    从最后一个catch处理之后开始恢复执行;

    C++在堆栈展开期间为异常抛掷前构造的所有局部对象自动调用析构函数;

    标准程序库异常处理

    标准异常类的基础

    exception:标准程序库异常类的公共基类

    logic_error表示可以在程序中被预先检测到的异常

    如果小心地编写程序,这类异常能够被避免

    runtime_error表示难以被预先检测的异常

    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    01背包
    用动态规划求两个自然数的最大公约数
    编程实现文件的复制功能,要求源文件名及目标文件名在程序运行后根据提示输入
    this和super
    JAVA中static的使用
    结构化异常处理 笔记
    继承和多态 笔记
    javascript 客户端验证和页面特效制作 学习笔记
    定义封装的类类型 笔记
    C# 核心编程结构Ⅱ 笔记
  • 原文地址:https://www.cnblogs.com/hujianglang/p/6617357.html
Copyright © 2011-2022 走看看