- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
BCB讲座第三讲异常处理
异常处理
在程序设计过程中,我们不仅仅要考虑如何实现程序的功能,还要防止可能出现的异常情况,所谓异常情况就是指在程序运行过程中出现的不正常或不可预料的情况,例如打开的文件不存在、不能分配所需的内存等等。特别是当一个软件要面向大量用户时,它所遇到的运行情况可能千差万别,如果不能够应付各种异常情况,其功能再好再强大也难以弥被这样的缺陷。本讲要介绍的就是如何在CBuilder中实现异常处理,并为Mp3Collect添加异常处理代码。
传统的异常处理方法
为了应付可能出现的不正常情况,传统的方法主要是通过条件判断语句来检查是否产生异常的事件。例如,在MP3Collect程序的SaveFile函数中,我们添加了如下的条件语句,以处理可能产生的打开文件错误:
if(fp==NULL)
{
ShowMessage(不能打开文件Mp3Collect.sav,请检查是否为共享冲突);
return;
}
在检测到了异常事件后,一般需要做两件事,一是显示错误的信息,例如以上代码中对ShowMessage()函数的调用,再一个就是中断程序原有的执行流程,因为异常的发生已经使得程序无法满足继续执行原有流程的条件,在SaveFile()函数中,如果文件打开失败,就不能继续后面的写文件操作,因此在异常处理中用return语句直接返回,中断了保存文件的操作。
这种异常处理的方法当然最容易理解,但在大型的软件开发项目中,需要考虑的异常情况非常多,如果每个地方都使用if语句来检查错误并处理异常,就会使编程工作变得非常繁杂,源代码的可读性也会大大降低。为了解决这一问题,人们在面向对象编程中找到了更加结构化和更简便的方法来实现异常处理。
CBuilder中的异常处理机制
CBuilder支持多种异常处理机制,其中包括符合ANSI标准的C++异常处理机制,微软公司提供的Win32结构化异常处理机制,以及基于VCL的异常处理机制,后者是Borland公司建议在CBuilder编程中采用的异常处理方式。
基于VCL的典型异常处理结构的形式如下所示:
try{
//可能引起异常的代码段
}
catch(Exception e){
//对异常进行处理的代码
}
其中try和catch为C++关键字。try用于标志可能产生异常的代码段(Block),该代码段用try后紧跟的一对大括号{}包括在内。如果这段程序在运行时产生了异常,系统会中止try代码段中的代码执行,并查找相应的catch代码段,如果找到了合适的catch代码段,即表示错误被捕捉到,这时相应的catch代码段被执行,如果没有找到合适的catch代码段,即错误始终没有被捕捉到,则系统会调用VCL库按照缺省的方法来处理异常。当然,如果try代码段在运行时一切正常,则catch代码段是不会被调用的。
在上面的异常处理结构中,我们看到,catch语句带有一个参数Exception e,该参数是一个异常对象的引用。其中Exception是VCL库提供的异常处理类,该类代表了VCL库对异常事件的一个封装。也许有的朋友要问,catch语句中的Exception e对象是哪里来的呢?整个程序代码中没有该对象的声明或定义呀?这正是VCL异常处理机制的特点,当异常产生时,VCL库会自动生成该异常对象,并将其作为参数调用合适的catch代码段。
Exception类也是其它VCL异常处理类的基类。为了处理不同的异常原因,CBuilder提供了多种异常处理类,例如,代表申请内存失败的EOutOfMemory异常,代表除数为0的EDivByZero异常,代表文件打开错误的EFOpenError,代表数据库操作错误的EDatabaseError,以及代表多媒体操作错误的EMCIDeviceError等。
事实上,一个代码块可能产生不止一种类型的错误,这样,对一个try代码段可以采用多个catch代码段。例如,一个try代码段内部可能产生申请内存失败异常EOutOfMemory和打开文件错误EFOpenError,那么我们可以使用两个catch语句来分别监视两种异常情况。采用多个catch语句的优点在于,可以对不同类型的异常分别进行捕捉和处理,但有时即使使用了多个catch语句后仍无法保证能够捕捉到所有的异常,这时可以使用参数为省略号(...)的通用catch语句,它可以捕捉尚未捕捉的所有任意类型的异常。
下面是使用多个catch及通用catch语句的典型例子,try代码段中进行了打开文件操作、分配内存操作、文件读操作和整数除法操作,这些操作都有可能引起异常,程序中对打开文件异常和分配内存异常分别进行了处理,对剩下的异常则统一由catch(...)语句进行处理。
try{
FILE * fp=fopen(test.dat,rb);//可能出
您可能关注的文档
最近下载
- 人教版英语2024七年级上册全册单元知识清单(背诵版).pdf VIP
- cambridge igcse chemistry, fourth edition richard(剑桥igcse化学第四版理查德).pdf VIP
- 使用eNSP搭建基础网络资料.doc VIP
- 胆囊切除术后综合征病人的护理.pptx VIP
- 小学数学六年级工程问题专题.ppt VIP
- 2024贵州石阡县县直机关考调(选聘)机关事业单位工作人员笔试模拟试题及答案解析.docx VIP
- 2025年高考英语全国新课标II卷试卷评析及备考策略(课件).pptx VIP
- 极飞科技智慧农业解决方案V2.1(通用版).pdf VIP
- 名词性从句练习题及答案详解.pdf VIP
- 数据通信技术 交换式以太网 交换式以太网.ppt VIP
文档评论(0)