清华大学谭浩强教授的C++教程第14章

合集下载

《谭浩强《C程序设计》(第4版)笔记和课后习题详解》读书笔记模板

《谭浩强《C程序设计》(第4版)笔记和课后习题详解》读书笔记模板

第11章常见错误分 析
1.1复习笔记 1.2课后习题详解
2.1复习笔记 2.2课后习题详解
3.1复习笔记 3.2课后习题详解
4.1复习笔记 4.2课后习题详解
5.1复习笔记 5.2课后习题详解
6.1复习笔记 6.2课后习题详解
7.1复习笔记 7.2课后习题详解
8.1复习笔记 8.2课后习题详解
作者介绍
这是《谭浩强《C程序设计》(第4版)笔记和课后习题详解》的读书笔记模板,暂无该书作者的介绍。
谢谢观看
目录分析
第2章算法——程 序的灵魂
第1章程序设计和C 语言
第3章最简单的C程 序设计——顺序程
序设计
1
第4章选择结构 程序设计
2
第5章循环结构 程序设计
3
第6章利用数组 处理批量数据
4 第7章用函数实
现模块化程序 设计
5
第8章善于利用 指针
第10章对文件的输 入输出
第9章用户自己建 立数据类型
9.1复习笔记 9.2课后习题详解
10.1复习笔记 10.2课后习题详解
11.1复习笔记 11.2课后习题详解
读书笔记
这是《谭浩强《C程序设计》(第4版)笔记和课后习题详解》的读书笔记模板,可以替换为自己的心得。
精彩摘录
这是《谭浩强《C程序设计》(第4版)笔记和课后习题详解》的读书笔记模板,可以替换为自己的精彩内容 摘录。
谭浩强《C程序设计》(第4版)笔记 和课后习题详解
读书笔记模板
01 思维导图
03 目录分析 05 精彩摘录
目录
02 内容摘要 04 读书笔记 06 作者介绍
思维导图
本书关键字分析思维导图
习题

c语言程序设计(第四版)-谭浩强

c语言程序设计(第四版)-谭浩强

c语言程序设计(第四版)-谭浩强C语言程序设计(第四版)是由谭浩强教授编写的一本广受欢迎的C语言教材。

这本书以其深入浅出的讲解、丰富的实例和清晰的结构,帮助了无数计算机专业的学生和自学者掌握了C语言的基础知识和编程技巧。

第一章:C语言概述谭浩强教授在开篇第一章中对C语言的历史、特点以及C语言在现代编程领域中的应用进行了简要的介绍。

他强调了C语言的高效性、灵活性以及它在操作系统、嵌入式系统等领域的广泛应用。

第二章:C语言基础第二章深入讲解了C语言的基本语法,包括数据类型、运算符、表达式等。

谭教授通过实际的代码示例,帮助读者理解C语言的基本概念。

第三章:控制语句在第三章中,谭教授详细介绍了C语言中的控制语句,包括条件语句(if、switch)、循环语句(for、while、do-while)和跳转语句(break、continue、goto)。

每个控制语句都有详细的解释和示例代码,帮助读者掌握程序流程控制的方法。

第四章:数组第四章讨论了数组的概念、声明和使用。

谭教授特别强调了数组在C语言中的重要性,以及如何使用数组来存储和处理数据集合。

第五章:函数函数是C语言中实现代码复用的重要手段。

第五章详细讲解了函数的定义、声明、调用以及参数传递。

谭教授还介绍了递归函数的概念和应用。

第六章:指针第六章是C语言中的一个难点,谭教授通过详细的解释和丰富的示例,帮助读者理解指针的概念、指针与数组的关系、指针的运算以及指针在函数中的应用。

第七章:结构体与联合体第七章介绍了C语言中的结构体和联合体,这两种数据类型允许程序员创建复杂的数据结构,以满足不同程序设计的需求。

第八章:预处理指令第八章讲解了预处理指令的概念和使用,包括宏定义、文件包含、条件编译等。

这些指令在C语言程序设计中起到了辅助和优化的作用。

第九章:位运算第九章介绍了位运算的概念和应用,包括位逻辑运算、位移运算等。

位运算在处理二进制数据时非常有用。

第十章:文件操作第十章详细讲解了C语言中的文件操作,包括文件的打开、关闭、读写等操作。

谭浩强C程序设计(第三版)课件_第14章_常见错误(共8张PPT)

谭浩强C程序设计(第三版)课件_第14章_常见错误(共8张PPT)
件。 (24) 误认为形参值的改变会影响实参的值。 (25) 函数的实参和形参类型不一致。 (26) 不同类型的指针混用。 (27) 没有注意函数参数的求值顺序。 (28) 混淆数组名与指针变量的区别。 (29) 混淆结构体类型与结构体变量的区别,对一个结构体
类型赋值。
5
第五页,共8页。
14.1常见(chánɡ jiàn)错误分析
值。 (18) switch语句的各分支中漏写break语句。 (19) 混淆字符和字符串的表示形式。 (20) 使用自加(++)和自减(--)运算符时出的错
误。
4
第四页,共8页。
14.1常见错误(cuòwù)分析
(21) 所调用的函数在调用语句(yǔjù)之后才定义,而又在 调用前未声明。
(22) 对函数声明与函数定义不匹配。 (23) 在需要加头文件时没有用#include命令去包含头文
3
第三页,共8页。
14.1常见错误(cuòwù)分析
(11) 在用标识符时,忘记了大小写字母的区别。 (12) 引用数组元素时误用了圆括号。 (13) 在定义数组时,将定义的“元素个数”误认为
是“可使用的最大下标值”。 (14) 对二维或多维数组的定义和引用的方法不对。 (15) 误以为数组名代表数组中全部元素。 (16) 混淆字符数组与字符指针的区别。 (17) 在引用指针变量之前没有对它赋予(fùyǔ)确定的
(21) 所调用的函数在调用语句之后才定义,而又在调用前未声明。 (14) 对二维或多维数组的定义和引用的方法不对。 1常见错误(cuòwù)分析 1 常见(chánɡ jiàn)错误分析 (29) 混淆结构体类型与结构体变量的区别,对一个结构体类型赋值。 ③ 运行错误(cuòwù) (27) 没有注意函数参数的求值顺序。 1常见(chánɡ jiàn)错误分析

《c++程序设计》谭浩强_答案 第14章

《c++程序设计》谭浩强_答案 第14章

14.1题#include <iostream>#include <cmath>using namespace std;double q(double,double,double);void main(){double a,b,c,p,x1,x2;cout<<"please enter a,b,c:";cin>>a>>b>>c;p=-b/(2*a);try{x1=p+q(a,b,c);x2=p-q(a,b,c);cout<<"x1="<<x1<<endl<<"x2="<<x2<<endl;}catch(double d){cout<<"a="<<a<<",b="<<b<<",c="<<c<<",disc="<<d<<",error!"<<endl;} cout<<"end"<<endl;}double q(double a,double b,double c){double disc;disc=b*b-4*a*c;if (disc<0) throw disc;return sqrt(disc)/(2*a);}14.2题#include <iostream>#include <string>using namespace std;class Student{public:Student(int n,string nam){cout<<"constructor-"<<n<<endl;num=n;name=nam;}~Student(){cout<<"destructor-"<<num<<endl;}void get_data();private:int num;string name;};void Student::get_data(){if(num==0) throw num;else cout<<num<<" "<<name<<endl;cout<<"in get_data()"<<endl;}void fun(){Student stud1(1101,"tan");stud1.get_data();try{Student stud2(0,"Li");stud2.get_data();}catch(int n){cout<<"num="<<n<<",error!"<<endl;}}int main(){cout<<"main begin"<<endl;cout<<"call fun()"<<endl;fun();cout<<"main end"<<endl;return 0;}14.3题//main file#include <iostream>using namespace std;#include "xt14-3-h1.h"#include "xt14-3-h2.h"using namespace std;using namespace student1;int main(){Student stud1(1001,"Wang",18,"123 Beijing Road,Shanghua"); stud1.show_data();student2::Student stud2(1102,"Li",'f',89.5);stud2.show_data();return 0;}14.3题H1//header1.h#include <string>namespace student1{class Student{public:Student(int n,string nam,int a,string addr){num=n;name=nam;age=a;address=addr;}void show_data();private:int num;string name;int age;string address;};void Student::show_data(){cout<<"num:"<<num<<" name:"<<name<<" age:"<<age <<" address:"<<address<<endl;}}14.3题H2//header2.h#include <string>namespace student2{class Student{public:Student(int n,string nam,char s,float sco){num=n;name=nam;sex=s;score=sco;}void show_data();private:int num;string name;char sex;float score;};void Student::show_data(){cout<<"num:"<<num<<" name:"<<name<<" sex:"<<sex <<" score:"<<score<<endl; }}。

《C语言程序设计》谭浩强版教案

《C语言程序设计》谭浩强版教案

《C语言程序设计》教案
单位:湖南理工职业技术学院学院(教研室):风能工程学院工业机器人专业授课教师:周常欣职称:助教
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
第29-30 课时
《C语言程序设计》教案
第31-32 课时
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
第37-38 课时
《C语言程序设计》教案
第39-40 课时
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案
《C语言程序设计》教案。

C语言谭浩强完整课件

C语言谭浩强完整课件

着广泛的应用。
计算机系统基本概念
计算机系统的组成
计算机系统由硬件系统和软件系统两大部分组成,硬件系统包括运算器、控制器、存储器 、输入设备和输出设备等五大部分;软件系统包括系统软件和应用软件两大类。
计算机的工作原理
计算机的工作原理可以概括为存储程序控制和程序控制流,即计算机通过执行存储在内存 中的程序来控制各部件协调工作。
在定义数组时,可以直接 对数组进行初始化,也可 以定义后再进行赋值。
一维数组的使用
通过下标访问数组元素, 下标从0开始,最大下标为 数组长度减1。
二维数组与多维数组
二维数组的定义
二维数组可以看作是一个 表格,由行和列组成,每 个元素都有两个下标。
二维数组的初始化
在定义二维数组时,可以 直接对数组进行初始化, 也可以定义后再进行赋值 。
scanf和printf函数都支持 格式化输入输出,可以通 过格式控制符指定输入输 出数据的类型和格式。
格式化输入
格式控制符
C语言提供了一组格式控制符,用于 指定输入输出数据的类型和格式,如 %d表示输入输出整数,%f表示输入 输出浮点数等。
格式化输入
格式化输出
使用printf函数进行格式化输出时, 可以指定输出数据的格式和显示方式 ,如控制小数位数、显示宽度等。
类型。
枚举常量的说明
在枚举类型定义中,可以列 出多个枚举常量,每个常量 对应一个整数值。默认情况 下,第一个枚举常量的值为0 ,后续常量的值依次递增1。
枚举变量的使用
声明枚举类型的变量后,可 以为其赋值。枚举变量的值 只能是枚举常量中定义的值 。使用枚举类型可以提高代 码的可读性和可维护性。
08
文件操作与数据处理

《C语言程序设计》教案(清华谭浩强)

《C语言程序设计》教案(清华谭浩强)

《C语言程序设计》教案(清华谭浩强)第一章:C语言概述1.1 课程介绍介绍C语言的历史和发展解释C语言的特点和应用范围强调学习C语言的重要性和目的1.2 C语言的基本概念解释编程语言和编译器的概念介绍C语言的基本数据类型和变量讲解C语言的语法结构和程序结构1.3 C语言的编译过程解释编译器的角色和功能介绍编译过程中的预处理、编译、汇编和步骤强调编译过程中产生的文件和它们的作用第二章:基本数据类型和运算符2.1 基本数据类型介绍整型、浮点型、字符型和布尔型的概念和用法解释不同数据类型的存储方式和大小强调数据类型的选择和使用场景2.2 变量和常量解释变量的概念和作用介绍变量的声明和初始化方法讲解常量的概念和用法2.3 运算符介绍算术运算符、关系运算符和逻辑运算符的概念和用法解释赋值运算符和条件运算符的作用强调不同运算符的优先级和使用规则第三章:控制语句3.1 条件语句介绍if语句的语法和用法讲解switch语句的概念和用法强调条件语句的选择和嵌套使用3.2 循环语句介绍for循环、while循环和do-while循环的概念和用法解释循环控制语句如break和continue的作用强调循环条件的设置和循环次数的控制3.3 跳转语句介绍goto语句的概念和用法讲解label标签的作用和跳转规则强调跳转语句的使用场景和可能导致的问题第四章:函数和指针4.1 函数的基本概念介绍函数的定义和声明讲解函数的参数传递和返回值强调函数的命名规则和命名规范4.2 指针的概念和用法解释指针的概念和作用介绍指针的声明和初始化方法讲解指针的赋值和指针运算4.3 指针和数组介绍数组的概念和用法解释指针和数组的关系强调指针在数组操作中的应用第五章:结构体和文件操作5.1 结构体的概念和用法介绍结构体的定义和声明讲解结构体的成员访问和内存布局强调结构体在数据组织中的应用5.2 文件操作的基本概念解释文件的概念和文件操作的重要性介绍文件打开、读写、关闭等操作的方法强调文件操作中的错误处理和文件指针的管理第六章:动态内存分配6.1 动态内存分配的概念介绍动态内存分配的原因和必要性解释malloc、calloc和realloc函数的作用和用法强调动态内存分配的注意事项和错误处理6.2 链表的概念和用法介绍链表的定义和结构讲解链表的创建、插入、删除和遍历操作强调链表的优势和应用场景6.3 动态内存分配的应用实例通过实例演示动态内存分配在实际编程中的应用讲解内存泄漏和内存溢出的概念强调编写高效和安全的程序的重要性第七章:字符串处理7.1 字符串的基本概念介绍字符串的定义和表示方法解释字符串的长度和字符串的结束标志强调字符串与数组的区别和联系7.2 字符串的常用函数介绍字符串的输入输出函数如printf和scanf 讲解字符串的拷贝、连接、比较等操作函数强调字符串处理函数的使用和注意事项7.3 字符串处理的应用实例通过实例演示字符串处理在实际编程中的应用讲解字符串排序、查找和替换等操作强调字符串处理在文本分析和数据处理中的应用第八章:标准库函数8.1 标准输入输出库函数介绍标准输入输出库stdio.h中的常用函数讲解文件读写、数据转换等函数的用法和功能强调标准库函数的使用场景和注意事项8.2 字符串处理库函数介绍字符串处理库string.h中的常用函数讲解字符串比较、查找和替换等函数的用法和功能强调字符串处理库函数的使用和与其他库函数的配合8.3 数学计算库函数介绍数学计算库math.h中的常用函数讲解数学运算、三角函数和指数函数等函数的用法和功能强调数学计算库函数在数学计算和科学计算中的应用第九章:并发编程和同步机制9.1 并发编程的基本概念介绍并发编程的定义和目的解释进程和线程的概念和关系强调并发编程的优势和挑战9.2 并发编程的同步机制介绍互斥锁、条件变量和信号量等同步机制的原理和用法讲解同步机制在多线程编程中的应用和注意事项强调同步机制在避免竞态条件和数据一致性中的重要性9.3 并发编程的应用实例通过实例演示并发编程在实际应用中的优势和挑战讲解多线程的创建、同步和通信等操作强调并发编程在多任务处理和性能优化中的应用第十章:C语言编程实践10.1 编程实践的重要性强调编程实践在学习和掌握C语言中的重要性解释编程实践对于提高编程能力和解决问题的作用强调编程实践中的代码质量和编程规范10.2 编程实践的项目和案例介绍常见的编程实践项目和案例讲解实际编程中的问题解决方法和技巧强调编程实践中的调试和测试的重要性10.3 编程实践的资源和工具介绍编程实践中的常用工具和环境讲解集成开发环境(IDE)的使用和代码管理强调编程实践中的团队合作和代码分享的重要性重点和难点解析重点环节1:C语言的基本概念和特点需要重点关注C语言的历史和发展,以及其特点和应用范围。

(谭浩强第四版)C语言教案 第14 周

(谭浩强第四版)C语言教案 第14 周
3.函数参数
函数调用作为一个函数的实参。例如:m = max (a , max ( b , c ) ) ;
其中max ( b , c )是一次函数调用,它的值作为max另一次调用的实参。m的值是a、b、c三者中的最大者。又如:printf ("%d", max (a,b));也是把max ( a , b )作为printf函数的一个参数。
“形式参数”:在定义函数时函数名后面括弧中的变量名。
“实际参数”:用函数时,函数名后面括弧中的表达式。
通常,希望通过函数调用使主调函数能得到一个确定的值,这就是函数的返回值。
如果被调用函数中没有return语句,并不带回一个确定的、用户所希望得到的函数值,但实际上,函数并不是不带回值,而只是不带回有用的值,带回的是一个不确定的值。
授课时间
第14周第1、2次课
授课时数
4节(含两节实训)
授课方式
(请打√)
理论课(√)讨论课()实验课()习题课(√)其他()
授课题目(教学章、节或主题):
第七章函数7.3函数的调用7.4局部变量和全局变量7.5变量的存储类别
教学目的、要求(分掌握、熟悉、了解三个层次):
1.掌握函数的嵌套和递归调用;
教学过程与教学内容:
(3)如果使用用户自己定义的函数,而该函数的位置在调用它的函数(即主调函数)的后面(在同一个文件中),应该在主调函数中对被调用的函数作声明。
函数原型的一般形式为
(1)函数类型函数名(参数类型1,参数类型2……);
(2)函数类型函数名(参数类型1,参数名1,参数类型2,参数名2……);
3.4局部变量
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。这称为“局部变量”。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

catch(double) //用catch捕捉异常信息并作相应处理 {cout<<″a=″<<a<<″,b=″<<b<<″,c=″<<c<<″,that is not a triangle!″<<endl;} cout<<″end″<<endl; }
double triangle(double a,double b,double c) //计算三角形的面积的函数 {double s=(a+b+c)/2; if (a+b<=c||b+c<=a||c+a<=b) throw a; //当不符合三角形条件抛出异常信息 return sqrt(s*(s-a)*(s-b)*(s-c)); }
说明: (1) 被检测的函数必须放在try块中,否则不起作用。 (2) try块和catch块作为一个整体出现,catch块是 try-catch结构中的一部分,必须紧跟在try块之后, 不能单独使用,在二者之间也不能插入其他语句。 但是在一个try-catch结构中,可以只有try块而无 catch块。即在本函数中只检查而不处理,把catch 处理块放在其他函数中。 (3) try和catch块中必须有用花括号括起来的复合语 句,即使花括号内只有一个语句,也不能省略花括 号。 (4) 一个try-catch结构中只能有一个try块,但却可 以有多个catch块,以便与不同的异常信息匹配。
它能捕捉所有类型的异常信息,并输出″OK″。 这种catch子句应放在trycatch结构中的最后,相 当于“其他”。如果把它作为第一个catch子句, 则后面的catch子句都不起作用。 (7) trycatch结构可以与throw出现在同一个函数 中,也可以不在同一函数中。当throw抛出异常信 息后,首先在本函数中寻找与之匹配的catch,如 果在本函数中无trycatch结构或找不到与之匹配 的catch,就转到离开出现异常最近的trycatch结 构去处理。
(5) catch后面的圆括号中,一般只写异常信息的类 型名, 如
catch(double)
catch只检查所捕获异常信息的类型,而不检查它 们的值。因此如果需要检测多个不同的异常信息, 应当由throw抛出不同类型的异常信息。 异常信息可以是C++系统预定义的标准类型,也可 以是用户自定义的类型(如结构体或类)。如果由 throw抛出的信息属于该类型或其子类型,则catch 与throw二者匹配,catch捕获该异常信息。 catch还可以有另外一种写法,即除了指定类型名 外,还指定变量名,如
}
double triangle(double a,double b,double c) {double area; double s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); return area; }
运行情况如下:
6 5 4↙(输入a,b,c的值) 9.92157 (输出三角形的面积) 1 1.5 2↙ (输入a,b,c的值) 0.726184 (输出三角形的面积) 1 2 1↙ (输入a,b,c的值) 0 (输出三角形的面积,此结果显然不对,因为不是三角形) 1 0 6↙ (输入a,b,c的值) (结束)
分3种情况分析运行情况: (1) 执行上面的程序。图14.1为有函数嵌套时异 常处理示意图。
14.1 异常处理
14.1.1 异常处理的任务
程序编制者不仅要考虑程序没有错误的理想情况, 更要考虑程序存在错误时的情况,应该能够尽快地 发现错误,消除错误。 程序中常见的错误有两大类: 语法错误和运行错误。 在编译时,编译系统能发现程序中的语法错误。 有的程序虽然能通过编译,也能投入运行。但是在 运行过程中会出现异常,得不到正确的运行结果, 甚至导致程序不正常终止,或出现死机现象。这类 错误比较隐蔽,不易被发现,往往耗费许多时间和 精力。这成为程序调试中的一个难点。
在设计程序时,应当事先分析程序运行时可能出现 的各种意外的情况,并且分别制订出相应的处理方 法,这就是程序的异常处理的任务。 在运行没有异常处理的程序时,如果运行情况出现 异常,由于程序本身不能处理,程序只能终止运行。 如果在程序中设置了异常处理机制,则在运行情况 出现异常时,由于程序本身已规定了处理的方法, 于是程序的流程就转到异常处理代码段处理。用户 可以指定进行任何的处理。 需要说明,只要出现与人们期望的情况不同,都可 以认为是异常,并对它进行异常处理。因此,所谓 异常处理指的是对运行时出现的差错以及其他例外 情况的处理。
这样做使异常的发现与处理不由同一函数来完成。 好处是使底层的函数专门用于解决实际任务,而不 必再承担处理异常的任务,以减轻底层函数的负担, 而把处理异常的任务上移到某一层去处理。这样可 以提高效率。 C++处理异常的机制是由3个部分组成的,即检查 (try)、抛出(throw)和捕捉(catch)。把需要检查的语 句放在try块中,throw用来当出现异常时发出一个 异常信息,而catch则用来捕捉异常信息,如果捕 捉到了异常信息,就处理它。
void f2( ) {void f3( ); try {f3( );} //调用f3( ) catch(int) {cout<<″Ok2!″<<endl;} cout<<″end2″<<endl; } void f3( ) {double a=0; try {throw a;} //抛出double类型异常信息 catch(float) {cout<<″OK3!″<<endl;} cout<<″end3″<<endl; }
例14.1 给出三角形的三边a,b,c,求三角形的面积。 只有a+b>c,b+c>a,c+a>b时才能构成三角形。设置 异常处理,对不符合三角形条件的输出警告信息, 不予计算。 先写出没有异常处理时的程序:
#include <iostream> #include <cmath> using namespace std; int main( ) {double triangle(double,double,double); 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;
(4) 这个异常信息提供给try-catch结构,系统会寻 找与之匹配的catch子句。 (5) 在进行异常处理后,程序并不会自动终止,继 续执行catch子句后面的语句。 由于catch子句是用来处理异常信息的,往往被称 为catch异常处理块或catch异常处理器。
下面讲述异常处理的语法。 throw语句一般是由throw运算符和一个数据组成的, 其形式为 throw 表达式; try-catch的结构为 try {进行异常处理的语句}
修改程序,在函数traingle中对三角形条件进行检 查,如果不符合三角形条件,就抛出一个异常信息, 在主函数中的try-catch块中调用traingle函数,检 测有无异常信息,并作相应处理。修改后的程序如 下:
#include <iostream> #include <cmath> using namespace std; void main( ) {double triangle(double,double,double); double a,b,c; cin>>a>>b>>c; try//在try块中包含要检查的函数 {while(a>0 && b>0 && c>0) {cout<<triangle(a,b,c)<<endl; cin>>a>>b>>c; }
第14章 C++工具
14.1 异常处理 14.2 命名空间 14.3 使用早期的函数库
在C++发展的后期,有时C++编译系统根据实际工 作的需要,增加了一些功能,作为工具来使用,其 中主要有模板(包括函数模板和类模板)、异常处理、 命名空间和运行时类型识别,以帮助程序设计人员 更方便地进行程序的设计和调试工作。1997年 ANSI C++委员会将它们纳入了ANSI C++标准,建 议所有的C++编译系统都能实现这些功能。这些工 具是非常有用的,C++的使用者应当尽量使用这些 工具。
(8) 在某些情况下,在throw语句中可以不包括表达 式,如
throw;
表示“我不处理这个异常,请上级处理”。 (9) 如果throw抛出的异常信息找不到与之匹配的 catch块,那么系统就会调用一个系统函数 terminate,使程序终止运行。 例14.2 在函数嵌套的情况下检测异常处理。 这是一个简单的例子,用来说明在try块中有函数 嵌套调用的情况下抛出异常和捕捉异常的情况。请 自己先分析以下程序。
14.1.2 异常处理的方法
在一个小的程序中,可以用比较简单的方法处理异 常。但是在一个大的系统中,如果在每一个函数中 都设置处理异常的程序段,会使程序过于复杂和庞 大。因此,C++采取的办法是: 如果在执行一个函 数过程中出现异常,可以不在本函数中立即处理, 而是发出一个信息,传给它的上一级(即调用它的 函数),它的上级捕捉到这个信息后进行处理。如 果上一级的函数也不能处理,就再传给其上一级, 由其上一级处理。如此逐级上送,如果到最高一级 还无法处理,最后只好异常终止程序的执行。
相关文档
最新文档