内容正文:
异常处理
异常是指程序在运行过程中,由于使用环境的变化和用户误操作而产生的错误。异常处理是指在程序设计过程中,针对可预测的异常编写相应的处理代码,防止异常发生后造成严重的后果。
目录
第13章
C++程序设计案例教程
13.1 异常处理
Add your text in here
Click to add Text
求解一元二次方程实根时的异常处理
案例引入
编程求解一元二次方程实根,要求进行异常处理,判断Δ(b2-4ac)是否大于0,成立则计算实根,否则重新输入。
目录
第13章
C++程序设计案例教程
12.1 函数模板
源代码展示
#include "stdafx.h"
#include <iostream.h>
#include <math.h>
double delta(double a,double b,double c) //定义函数,计算Δ
{
double d=b*b-4*a*c;
if(d<0)
throw d; //抛出异常
return d;
}
int main(int argc, char* argv[])
{
double a,b,c,d;
cout<<"请输入a,b,c:";
cin>>a>>b>>c;
while(1) //循环,直到输入正确、能计算实根后跳出
{
try //检查
{
d=delta(a,b,c); //调用函数delta()
cout<<"x1="<<(-b+sqrt(d))/(2*a)<<endl;
cout<<"x2="<<(-b-sqrt(d))/(2*a)<<endl;
break; //跳出循环
}
catch(double) //捕获throw抛出的异常
{
cout<<"Δ小于0,请重新输入a,b,c:";
cin>>a>>b>>c;
}
}
return 0;
}
目录
第13章
C++程序设计案例教程
12.1 函数模板
运行结果
程序分析
上述程序首先定义函数delta()计算Δ,如果Δ小于0,使用throw语句抛出异常(程序中将Δ抛出),然后将可能出现异常的语句(如调用函数delta()的语句)放在try后面的花括号中,并在catch语句块中包含对该异常的处理。程序运行后,如果try语句块内没有发生异常,则catch子句不起作用;如果发生异常,则对throw抛出的异常进行处理,catch子句的参数数据类型应与throw语句后的表达式数据类型相同。
目录
第13章
C++程序设计案例教程
知识讲解
C++的异常处理机制由三部分组成:检查(try)、抛出(throw)和捕获(catch)。将需要检查的语句放在try语句块中,throw用来当发生异常时发出一个异常消息,catch语句块用于捕获throw抛出的异常信息,如果捕获到异常信息,就对其进行处理。
throw语句的语法格式为:
throw 表达式;
try-catch的结构为:
try
{
//需要检查的语句
}
catch(异常信息类型)
{
//进行异常处理的语句
}
目录
第13章
C++程序设计案例教程
知识讲解
catch子句的参数一般只写异常信息的类型。例如:
catch(double)
catch语句块只检查所捕获异常信息的类型,而不检查其值。
一个try-catch结构中只允许有一个try语句块,但可以有多个catch语句块,用来与不同的异常信息匹配。一旦某个异常被抛出,会按照catch语句块的顺序依次寻找匹配的语句。如果找到,就进入该catch语句块进行处理,而其他的catch语句块就不会进入了。
目录
第13章
C++程序设计案例教程
13.2 异常处理中的析构
Add your text in here
Click to add Text
异常处理中调用析构函数
案例引入
定义一个类Point,并定义构造函数和析构函数,以及用于输出坐标x和y的值的函数show()。在函数show()中,如果x和y值都为0,则抛出异常,否则输出坐标。为了清晰地展现程序流程,通过cout语句输出相关信息,根据输出结果分析在异常处理中是如何调用析构函数的。
目录
第13章
C++程序设计案例教程
13.2 异常处理中的析构
源代码展示
#include "stdafx.h"
#