第8章 异常处理-【千锋教育】C++语言程序设计

2023-03-21
| 33页
| 103人阅读
| 0人下载
教辅

内容正文:

异常的概念 异常处理方法 异常处理的实现 异常规范 第8章 异常处理 异常与析构函数 异常类 重抛异常 标准异常类 1 理解异常的概念和异常处理机制 理解重抛异常 掌握掌握异常与析构函数、异常类 了解异常规范、标准异常类 学 习 目 标 LEARNING OBJECTIVES 初心至善 匠心育人 异常的概念 异常处理方法 异常处理的实现 异常规范 异常与析构函数 异常类 重抛异常 标准异常类 01 02 04 05 03 06 07 08 目 录 CATALOUGUE 初心至善 匠心育人 异常是对程序中出现错误或未预料的错误发出信号的方式,检测并处理异常是保证系统安全性及健壮性的重要手段,也是程序设计中应重点关注的内容。C++提供了异常处理机制,它使得程序出现异常时,力求做到程序继续运行。 初心至善 匠心育人 4 在程序中,常见的错误有语法错误和运行错误。对于语法错误,编程者可以通过编译系统报出的提示进行修改。对于运行错误,源代码可以通过编译,但在运行时却无法得到预期的结果,这可能是由系统条件、操作不当等原因引起的错误,如果程序中没有处理这些错误,程序就只能终止运行。 异常是指程序运行过程中出现的错误,如用户输入错误、设备故障、物理限制等。异常通常会使程序的正常流程被打断,因此为了确保程序的容错性,需要在代码中对这些异常进行处理,防止程序崩溃。 8.1 异常的概念 初心至善 匠心育人 5 接下来演示程序出现异常的情况,如例所示。 8.1 异常的概念 当程序运行时,从键盘输入2 4 2,回车后,发现运行结果为0。这是因为输入的三个数不能构成三角形,但程序没有检测并处理这个异常。因此为了提升程序的健壮性,程序应检测并处理异常。 初心至善 匠心育人 6 为了处理上例中的意外情况,常用的典型方法是让被调函数返回某一个状态码(或将错误码赋值给一个全局变量),然后外层的调用程序检测这个状态码,从而确定是否产生了某一类型的意外。另一种典型方法是当意外发生时通过调用exit()函数或abort()函数终止整个程序。 两种方法都是权宜之计,不能形成强有力的结构化异常处理模式。 第一种方法存在的问题是调用一个函数出现的异常信息要返回给调用函数,供调用函数根据返回的异常信息的情况酌情处理,但不能保证异常会被处理,另外有时异常信息需要逐层传递,这时实现起来就比较困难。 第二种方法存在的问题是exit()函数和abort()函数执行时不会调用局部对象的析构函数,这可能造成内存泄漏等问题。 8.2 异常处理方法 初心至善 匠心育人 7 鉴于上述缺点,编程者需要更加灵活、可读性强的异常处理方式,这就是将要学习的C++异常处理机制。 在C++中,异常处理机制的基本思想就是将异常的抛出与处理分离开来,如图所示。 8.2 异常处理方法 在图中,当一个模块中存在异常但却不能确定相应的处理方法时,该模块将抛出一个异常,然后检测该模块是否会引发异常,如果引发异常就需要捕获异常并作出相应的处理。如果程序始终没有处理这个异常,最终它会被抛到C++运行系统,运行系统捕获异常后,通常是终止这个程序。 初心至善 匠心育人 8 这个过程类似于棒球比赛中投手抛出球,球被捕手捕获,如图所示。 8.2 异常处理方法 由于这种异常处理机制使得异常的抛出与处理不在同一个模块中,因此引发异常模块可以着重解决具体问题,而不必过多地考虑对异常的处理,异常处理模块可以在适当的位置设计对不同类型异常的处理,这在大型程序中是非常有必要的。 初心至善 匠心育人 9 通过以上分析,可以得出C++的异常处理机制有以下优势: 当有异常发生时,函数的返回值可以忽略不进行处理,但异常机制抛出的异常不会被忽略。 当多层函数调用最里层函数出现异常时,函数的返回值需要在各层函数中都进行处理,而异常机制只需处理某一层即可。 当有异常发生时,函数的返回值没有任何语义信息,但异常机制抛出的异常可以包含语义信息。 8.2 异常处理方法 初心至善 匠心育人 10 在C++中,异常处理通过3个关键字来实现:throw、try和catch,其语法格式如下: 8.3 异常处理的实现 其中,try语句块为检测异常,若出现异常则由throw抛出,throw后跟随抛出的异常值。抛出异常后,从try语句块对应的所有catch语句块中依次寻找与抛出异常类型匹配的那个catch语句块从而进入该语句块进行异常处理。 初心至善 匠心育人 11 接下来分别介绍C++中检测异常、抛出异常、捕捉异常的语法结构及使用方法。 1.检测异常 检测异常使用try关键字进行实现,其语法格式如下: 8.3 异常处理的实现 其中,try后的花括号中应包含抛出异常的throw语句或包含抛出异常的函数调用语句。try语句块检测到异常后,会去最近进入的还未退出的try语

资源预览图

第8章 异常处理-【千锋教育】C++语言程序设计
1
第8章 异常处理-【千锋教育】C++语言程序设计
2
第8章 异常处理-【千锋教育】C++语言程序设计
3
第8章 异常处理-【千锋教育】C++语言程序设计
4
第8章 异常处理-【千锋教育】C++语言程序设计
5
第8章 异常处理-【千锋教育】C++语言程序设计
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。