第八章 C++异常处理

以下是本人整理的C++基础知识点,内容并不包含全面的C++知识,只是对C++重点内容、特点进行整理和归纳。

8.1 C++异常处理介绍

程序的错误
    语法错误:在编译和链接阶段就能发现
    逻辑错误:调试来解决
    运行时错误:运行期间发生的错误

 C++ 异常机制语法
    try{//匹配异常类型,传递异常数据
            可能抛出异常的语句
        }catch(exceptionType variable){ 
                处理异常的语句

        }

    try{ //不匹配异常类型,不传递异常数据
            可能抛出异常的语句
        }catch(exceptionType ){
                处理异常的语句

        }

    try{//多级 catch
        可能抛出异常的语句
        }catch (exception_type_1 e){
        处理异常的语句
        }catch (exception_type_2 e){
        处理异常的语句
        }
        ...
        catch (exception_type_n e){
        处理异常的语句
        }

    
    try - 检测异常
    catch - 捕获异常
    exceptionType - 异常类型
     variable - 接收异常信息

C++ 异常机制介绍
    异常处理过程
        流程:抛出(Throw)--> 检测(Try) --> 捕获(Catch)
        程序运行异常,抛出(throw)异常
        (try)检测到异常后程序的执行流会发生跳转,从异常点跳转到 catch 所在的位置
        跟异常信息匹配,在Catch中执行异常处理代码

    异常处理特点
        必须将异常显式地抛出,try 才能检测到;否则即使有异常 try 也检测不到
        异常一旦抛出,会立刻被 try 检测到,并且不会再执行异常点后面的语句


异常的位置
    运行范围在当前的 try 块中

8.2 C++异常类型以及多级catch匹配

用于匹配的异常类型
    可以基本类型,也可以是聚合类型
    语言本身以及标准库中的函数抛出的异常,都是 exception 类或其子类的异常(抛出它们的对象)

多级catch匹配过程
    按照从上到下的顺序,将异常类型和接收到的类型逐个匹配
    一旦匹配就停止检索,将异常交给当前catch处理,其他的 catch 不会被执行
    匹配失败,就交给系统处理,终止程序运行

catch 在匹配过程中的类型转换
    C++ 中的类型转换
        算数转换
            int --> float
            char --> int

        向上转型
            派生类向基类的转换

        const 转换
            非 const  -->  const 

        自定义类型转换

    匹配异常类型过程中的类型转换
        向上转型
        const 转换
        数组或函数指针转换

8.3 C++ throw(抛出异常)

 throw 关键字
    显式地抛出异常数据
        语法:throw exceptionData;

    用在函数头和函数体之间,指明当前函数能够抛出的异常类型

throw 用作异常规范 (不推荐用)
    异常规范语法
        double func (char param) throw (int);
            只能抛出 int 类型的异常
            抛出其他类型的异常,try 将无法捕获,只能终止程序

        double func (char param) throw (int, char, exception);
            抛出多种类型的异常

        double func (char param) throw ();
            不会抛出任何异常


    虚函数中的异常规范
        派生类虚函数的异常规范必须与基类虚函数的异常规范一样严格,或者更严格(异常类型更少)
        

    异常规范与函数定义和函数声明
        异常规范在函数声明和函数定义中必须同时指明,并且要严格保持一致
        声明:void func3() throw(float, char*);
        定义:void func3() throw(float, char*) { }

8.4 C++ exception类:C++标准异常的基类

exception 类位于 <exception> 头文件中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值