第八章C++工具 8.1异常处理 8.2命名空间 8.3使用早期的函数库 0
0 8.1 异常处理 8.2 命名空间 8.3 使用早期的函数库 第八章 C++工具
8.1异常处理 1、异常处理的任务 >程序的错误有两种:一种是编译错误,即语法错误。 如果使用了错误的语法、函数、结构和类,程序就无 法被生成运行代码。另一种是在运行时发生的错误 它分为不可预料的逻辑错误和可以预料的运行异常。 例如:程序执行时遇到除数为、下标越界、无法打开 文件、输入数据类型错误等导致程序错误。 >异常处理的任务:事先分析程序运行时可能出现的错 误,制定相应的处理方法。 1
1 8.1 异常处理 1、异常处理的任务 ➢ 程序的错误有两种:一种是编译错误,即语法错误。 如果使用了错误的语法、函数、结构和类,程序就无 法被生成运行代码。另一种是在运行时发生的错误, 它分为不可预料的逻辑错误和可以预料的运行异常。 例如:程序执行时遇到除数为、下标越界、无法打开 文件、输入数据类型错误等导致程序错误。 ➢ 异常处理的任务:事先分析程序运行时可能出现的错 误,制定相应的处理方法
2、异常处理的方法 >在大的系统中,包含多个模块,每个模块又包 含许多函数,函数之间互相调用,比较复杂。 如果在每个函数中都设置处理异常的程序段, 会使程序过于复杂和庞大。 >C++采取的办法是:如果执行一个函数过程中 出现异常,可以不在本函数中立即处理,而是 发出一个信息,传给它的上一级,若它的上一 级捕捉到这个信息也不能进行处理,再传给上 一级的函数,若到最后一级还无法处理,只好 异常终止程序
2 2、异常处理的方法 ➢在大的系统中,包含多个模块,每个模块又包 含许多函数,函数之间互相调用,比较复杂。 如果在每个函数中都设置处理异常的程序段, 会使程序过于复杂和庞大。 ➢C++采取的办法是:如果执行一个函数过程中 出现异常,可以不在本函数中立即处理,而是 发出一个信息,传给它的上一级,若它的上一 级捕捉到这个信息也不能进行处理,再传给上 一级的函数,若到最后一级还无法处理,只好 异常终止程序
8.1异常处理 2、异常处理的方法 >C++语言异常处理机制的基本思想是将异常的检测与处理 分离,当在一个函数体中检测到异常条件存在,但无法确 定相应的处理方法时,将引发一个异常,并由函数的直接 或间接调用检测并处理这个异常。这一基本思想用3个保 留字实现:try、throw和catch。其作用是: (1)ty:标识程序中异常语句块的开始,把需要检 查的语句放到try块中。 (2)throw:当出现异常时发出异常信息。 (3)catch:捕捉异常信息并处理。 3
3 8.1 异常处理 2、异常处理的方法 ➢ C++语言异常处理机制的基本思想是将异常的检测与处理 分离,当在一个函数体中检测到异常条件存在,但无法确 定相应的处理方法时,将引发一个异常,并由函数的直接 或间接调用检测并处理这个异常。这一基本思想用3个保 留字实现:try、throw和catch。其作用是: (1)try:标识程序中异常语句块的开始,把需要检 查的语句放到try块中。 (2)throw:当出现异常时发出异常信息。 (3)catch:捕捉异常信息并处理
例8.1:求三角形的面积,没有异常处理的程序 ①include<iostream> ②include<cmath> ③ using namespace std; ④ double triangle(double,double,double); ∥函数声明 ⑤ int main() ⑥⑧ double a,b,c; ⑦ cin>>a>>b>>cj ⑧ while(a>0&&b>0&&c>0) ⑨ cout<<triangle(a,b,c)<<endl; ⑩ cin>>a>>b>>c; ① ② return 0; } ④ ⑤double triangle(double a,double b,double c)∥函数定义 ⑥{double area,s; ⑦ s=(a+b+c)/2; ⑧ area=sqrt(s*(s-a)*(s-b)*(s-c)); ⑨ return area; 四} 4
4 例8.1:求三角形的面积,没有异常处理的程序 ① #include <iostream> ② #include <cmath> ③ using namespace std; ④ double triangle(double,double,double); //函数声明 ⑤ int main() ⑥ { double a,b,c; ⑦ cin>>a>>b>>c; ⑧ while (a>0 && b>0 && c>0) ⑨ { cout<<triangle(a,b,c)<<endl; ⑩ cin>>a>>b>>c; ⑪ } ⑫ return 0; ⑬ } ⑭ ⑮ double triangle(double a,double b,double c) // 函数定义 ⑯ { double area,s; ⑰ s=(a+b+c)/2; ⑱ area=sqrt(s*(s-a)*(s-b)*(s-c)); ⑲ return area; ⑳ }