- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]C面向对象程序设计课件第8章未讲
《面向对象技术与Visual C++》--第8章 第8章 异常处理 本章主要内容 异常处理概述 异常处理的语法 应用实例 异常处理概述 异常处理是由程序设计语言提供的运行时刻错误处理的一种方式。 程序运行中的有些错误是可以预料但不可避免的,这是要力争做到允许用户排除环境错误,继续运行程序;至少要给出适当的提示信息。 传统错误处理方法大致可以分为返回码机制和全局变量两种。 异常处理实现 C++语言提供对处理异常情况的内部支持。try, throw和catch语句就是C++语言中用于实现异常处理的机制。 有了C++异常处理,程序可以向更高的执行上下文传递意想不到的事件,从而使程序能更好地从这些异常事件中恢复过来。 异常处理的语法 try-throw-catch是抛出和捕获异常的基本机制。 Throw语句抛出异常(一个值),catch捕获异常。抛出一个异常后,try块会终止,转而执行catch块中的语句。 catch块结束之后,会继续执行catch块之后的语句(前提是catch块中没有终止程序或者执行另外一些特殊的操作)。 如果try块中没有抛出异常,那么在try块结束之后,程序将从catch块之后的语句继续执行。换言之,如果没有抛出异常,catch块会被忽略。 try块 如果在函数内直接用throw抛出一个异常(或在函数调用时抛出一个异常),将在异常抛出时退出函数。如果不想在异常抛出时退出函数,可以在函数体内创建一个特殊块用于解决程序中潜在的错误,在这个块中可以测试各种错误发生的可能性,通常称为测试块,它由关键字try引导。 其定义格式如下: 抛出异常 通常将抛出的值直接称为一个异常,所以执行throw语句就称为抛出异常,可以抛出任意类型的一个值。 其定义的格式如下: throw 抛出值的表达式 执行throw语句时,外围的try块就会停止执行。如果try块之后跟有一个合适的catch块,那么控制权就会转交给那个catch块。一般说来,throw语句几乎肯定要嵌入一个分支语句(比如if语句)中 。 捕获异常 抛出一个异常后,外围的try块会停止执行,并开始执行另一个部分的语句,也就是catch块。 执行catch的过程称为捕获异常或者异常处理。 一个异常被抛出以后,最终应该由某个catch块来处理。 一般说来,catch块参数主要完成两件事情: catch块参数前要加一个类型名,表示catch块可以捕获什么类型的异常抛出值; catch块参数为捕获的异常抛出值指定了一个名称,所以在catch块中,又可以对这个异常抛出值进行相应的处理。 catch块的语法定义如下: catch (type_name variable_name) { 处理异常的相关语句 } 需要注意的是,如果try块中没有异常被抛出,那么在try块正常结束后,程序从catch块之后的语句继续执行。换言之,如果没有抛出异常,catch块会被忽略。 例 异常处理时的析构 #include iostream.h void MyFunc( void ); class Expt { public: Expt( ){}; ~Expt( ){}; const char *ShowReason( ) const { return Expt类异常。; } }; class Demo { public: Demo( ); ~Demo( ); }; Demo::Demo( ) { cout 构造 Demo. endl; } Demo::~Demo( ) { cout 析构 Demo. endl; } void MyFunc( ) { Demo D; cout 在MyFunc( )中抛掷Expt类异常。 endl; throw Expt( ); } int main( ) { cout 在main函数中。 endl; try { cout 在try块中,调用MyFunc( )。 endl; MyFunc( ); } catch( Expt E ) { cout 在catch异常处理程序中。 endl; cout 捕获到Expt类型异常:; cout E.ShowReason( ) endl; } catch( char *str ) { cout 捕获到其它的异常: str end
您可能关注的文档
- [工作计划]阜城县窗口单位和服务行业提升为民服务创先争优能力.doc
- [工作计划]队伍建设年度计划2011。。.doc
- [工作计划]防地震演练方案20101117.doc
- [工作计划]防病毒方案范本.doc
- [工作计划]青岛酒店管理职业技术学院特色专业建设发展规划.doc
- [工作计划]隐患排查治理制度.doc
- [工作计划]雪花暴爽啤酒推广策划案.doc
- [工作计划]青峰小学构建有效课堂实施计划.doc
- [工作计划]青年人才需提升自身素质吕梁山:韩微.doc
- [工作计划]项目名称 BusinessMatrix保险业商业智能解决方案.pdf
- PDM软件:Siemens Teamcenter二次开发_(17).Teamcenter最佳实践与案例分析.docx
- SCADA软件:GE Proficy二次开发_(4).Proficy开发环境搭建.docx
- 智能电表软件:Landis+Gyr智能电表二次开发_(13).系统集成与测试.docx
- 智能电表软件:Elster智能电表二次开发_(8).Elster智能电表二次开发环境搭建.docx
- PDM软件:Siemens Teamcenter二次开发_(11).TeamcenterAPI与编程基础.docx
- SCADA软件:GE Proficy二次开发_(7).报警与事件管理.docx
- 智能电表软件:Echelon智能电表二次开发_(11).智能电表行业标准与法规.docx
- 智能电表软件:Itron智能电表二次开发_(6).用户界面定制与开发.docx
- 智能电表软件:Elster智能电表二次开发_(9).Elster智能电表二次开发工具使用.docx
- PDM软件:PTC Windchill二次开发_(21).Windchill最佳实践案例分析.docx
文档评论(0)