第十八章_异常

一、异常的基本概念

遇到错误 抛出异常 捕获异常

异常:异常是一个类)是指在程序运行过程中发生的一些异常事件。(如:除0溢出、数组下标越界、所要读取的文件不存在、空指针、内存不足、访问非法内存等等)

c++异常处理 相比 c异常处理 的优势?(c用 返回值 处理异常,0成功,-1失败等等)

函数返回值可以忽略,但异常不可忽略。(忽略异常程序结束)

整型返回值没有任何语义信息。而异常却包含语义信息(类名)。

二、异常的抛出和捕获

没有catch(...)的话,如果没捕获到,系统退出

三、栈解旋

从进入try语句起,到异常被抛掷(throw)前这一期间,在栈上构造的所有对象,都会被自动析构,这一过程称为栈的解旋。

先构造再析构,析构和构造顺序相反。

四、异常的接口声明

异常的接口声明:描述 当前函数 可以抛些抛出哪些类型的异常。

1.(函数默认)可以抛出任何类型的异常(推荐) 

void func01()
{
//throw 1;
//throw '1';
throw "hello";
}

2.只能抛出特定类型的异常

void func02() throw(int,char)
{
//throw 1;
//throw '1';
throw "hello";//抛出 不能捕获
}

3.不能抛出任何异常 

void func03() throw()
{
//throw 1;
//throw '1';
throw "hello";
}

4.异常变量的生命周期

4.1 以普通对象 接异常值

4.2 以对象指针 接异常值

4.3 对象引用 接异常值(推荐)

五、异常的多态

多态是用虚函数完成的,父类指针存子类空间;

异常的多态 就是 抛出子类,捕获父类(引用),父类引用 可以捕获 该父类派生出的所有子类

 六、c++标准异常

 logic_error的子类

runtime_error的子类

exception是所有异常的祖先,一般正式开发中都直接用exception捕获,【what()是exception的一个虚函数,一定会有子类重写该函数】如下

 六、编写自己的异常

编写自己的异常,一定要基于标准异常类,不能乱编

总结:

1.抛出异常  看看标准异常有哪些 

2.捕获异常  都用  exception引用 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值