异常的概念
一、语法错误
在编写程序是,程序中的关键字拼写错、标识符未定义、控制结构不完整、程序语句不合乎编译器的语法规则等,这种错误在编译、连接是由表编译器指出。
二、逻辑错误
由于编程者对问题的理解不够造成算法设计有误,导致程序虽然能顺利运行,但是没有得到预期的结构,这类错误通过调试与测试发现。
三、运行错误
程序在运行的过程中由于意外的结果,运行环境问题造成程序异常种植,如内存空间不足、打开文件不存在、文件读写不成功、执行了除0操作等。
C++异常处理机制
一、异常处理
C++的异常处理引入了三个关键字try(检测异常)、throw(抛出异常)、catch(捕获异常),利用这种结构化的形式来描述异常处理过程。
二、各异常处理作用
1、try负责监视可能出现异常的程序段,当程序运行中出现异常时,他会检测出这个异常,程序将不能再沿着正常的程序逻辑路径前进。
2、throw负责抛出异常,并将程序控制权交给catch子句。
3、catch负责捕获异常,并对不同的异常进行相应的处理。
三、各语句块格式
1、try函数:语句块中的程序语句执行是产生的异常,然后抛出异常。
try
{
//程序执行语句序列
}
2、throw函数:在发生异常时抛出产生异常对象。
throw(异常类型表达式);
3、catch函数:语句块用于铺货匹配throw抛出的异常对象,然后进行处理。
catch(异常类型)
{
//异常处理语句序列
}
四、异常处理的执行过程
1、执行try块中的程序语句序列;
2、执行期间没有执行到throw()(没有引起异常),则跳过异常处理区的catch语句块,程序向下执行;
3、若执行期间引起异常,则执行throw()语句抛出异常,进入异常处理区,将throw()抛出的异常类型表达式(对象)依次与catch()中的类型匹配,获得匹配的catch子句将捕获并处理异常,继续执行异常处理区域后的语句;
4、如果未找到匹配的异常处理子句(异常未捕获到),程序自动调用结束函数terminate()(函数terminate将通知用户且系统终止程序的运行)。即使不能处理某种异常,也应该编写代码来捕获这个异常,并在退出之前输出一条合适的错误消息。
在函数中抛出异常使程序保持良好的结构,嵌套调用的函数内层抛出的异常从内层逐层向外传递。传递的异常被捕获,函数开始退栈过程。