20210728

20210728

C-plus-plus

异常处理机制:
在c语言中,异常处理,是通过 if 语句来分条件进行判断
在 C++ 语言中,异常处理,是通过返回一个异常事件对象的方式来表示异常,进行做相应的处理

异常为什么好?
1、函数的返回值可以忽略,但是异常不可忽略,必须进行处理
2、整数返回值没有语义信息,而异常却包含语义信息;(根据异常进行匹配,抛出一个异常对象,根据异常对象的类名就可以判断异常的特点)
3、异常可以调用跳级;假如 func1 调用 func2 ,func2 调用 func 3 ,在func3中出现异常之后,向上进行抛出,在func2中进行处理,或者在func1中进行处理均可

基本语法:
1、在需要抛出异常的位置:throw 对象
2、在调用的位置接收这个异常: try{ }
3、接收到这个异常之后,将异常进行处理: catch(类型 对象名){ } // 对象名接收的就是异常的内容

如果异常抛出到顶层,依然没有内容进行捕获处理,那么这个时候,程序会挂掉,终止执行(调用 terminate):
1、跨函数
2、异常必须处理

栈解旋:
在一个函数中,抛出一个异常,那么此时在这个函数中定义的所有数据类型的对象(不是对象指针)都会自动被析构掉.(在catch处理之前就被释放掉了)

为了加强程序的可读性,可以在函数声明中列出可能抛出异常的所有数据类型

void divid() throw(int , float, char){

}

// 禁止 抛出异常
void divide() throw(){

}

// 可以抛出任何类型的异常
void divide(){

}

catch(className e){
    
}catch(...){    // 捕获所有异常

}

异常可以抛出: 数字、字符串、自定义类对象

异常对象声明周期:
普通类型元素(异常对象):在异常处理完成(catch块结束之后就释放掉了)
引用类型元素:在异常处理完成(catch块结束之后就释放掉了)
指针类型元素:抛出异常的时候,使用 new MyException() 进行抛出, 在异常处理完成之后 手动 delete 掉即可

编写自己的异常库:所有的异常类的父类都是 exception 类,那么自己的异常类来继承这个 exception 类即可(确保我们自己编写的异常符合C++标准)
1、建议自己的异常类要继承标准异常类
2、重写 父类中的 what 函数和虚析构函数
3、添加拷贝构造函数、等号操作符重载函数

输入输出流:
cout
cin
cerr: 没有缓冲区
clog:有缓冲区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值