以下是本人整理的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> 头文件中