《Visual C++ 6.0实例教程》电子教案 第8章

上传人:E**** 文档编号:89409338 上传时间:2019-05-24 格式:PPT 页数:15 大小:152KB
返回 下载 相关 举报
《Visual C++ 6.0实例教程》电子教案 第8章_第1页
第1页 / 共15页
《Visual C++ 6.0实例教程》电子教案 第8章_第2页
第2页 / 共15页
《Visual C++ 6.0实例教程》电子教案 第8章_第3页
第3页 / 共15页
《Visual C++ 6.0实例教程》电子教案 第8章_第4页
第4页 / 共15页
《Visual C++ 6.0实例教程》电子教案 第8章_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《《Visual C++ 6.0实例教程》电子教案 第8章》由会员分享,可在线阅读,更多相关《《Visual C++ 6.0实例教程》电子教案 第8章(15页珍藏版)》请在金锄头文库上搜索。

1、第8章 异常处理和诊断,内容摘要: 处理C+异常 MFC异常类捕获程序异常 MFC提供的用于诊断程序的宏调式程序,返回目录,8.1 处理C+异,学习目标 使用try、catch、throw三个关 字来实现异常处理 。,8.1,返回第8章,try块:标志可能会出现异常的代码。 catch块:紧跟着try块,里面包含了处理异常的代码。 throw块 :抛出一个异常,激活catch块中相应的异常处理代码。,8.1,例题,#include class CExcept public: CExcept(int ExCode) m_ExCode = ExCode; int GetCode() return

2、m_ExCode; private: int m_ExCode; ; void main() char ch; try cout ch; if(ch = y | ch = Y) throw “error description“; cout ch; if(ch = y | ch = Y) throw 1; cout ch; if(ch = y | ch = Y) throw 2; cout ch; if(ch = y | ch = Y) throw CExcept(5); cout ch; if(ch = y | ch = Y) throw 3.14159; cout “at end of t

3、ry block(no exception thrown“ n; catch(char *ErrorMsg) cout “char * exception thrown; exception message: “ ErrorMsg n; catch(int ErrorCode) cout “int exception thrown; exception code: “ ErrorCode n; catch(CExcept Except) cout “class CExcept exception thrown; code: “ Except.GetCode() n; catch(.) cout

4、 “unknown type of exception thrown“ n; cout “after last catch block“ n; ,8.1,解释,8.1,如果异常在关键字try后面的代码块中扔出,则控制立即传出这个块,如果try块后面有适当的catch块,则控制传入catch块处理异常。 catch块前面有关键字catch和括号中的声明。如果这个声明中指定的类型符合产生异常的throw语句给出的数值类型,则控制传入关键字catch后面的块。如果类型不符,则程序寻找另一个catch块。catch块中的代码执行完毕后,控制传入块后面的第一个语句。 在上面的程序中,如果在try中扔出的

5、是字符串,则进入第一个catch块;如果在try中扔出的是整型数据,则进入第二个catch块;如果在try中扔出的是CExcept类型,则进入第三个catch块;如果在try中扔出的是其他类型的数据,则进入最后一个catch块。 最后一个catch块的声明是一个省略号(),而不是具体数据类型,表示该catch块可以接收前面try块扔出的任何异常,但由于没有参数,不能访问扔出异常提供的值。如果有多个catch块,则省略号catch块应该放在最后。,8.2 MFC异常类,8.2,返回第8章,CFileException,8.2,三个描述异常原因的成员变量 1. m_cause:包含与错误原因对应的

6、代码。 2. m_lOsError:包含相关的操作系统错误数。 3. m_strFileName:包含出现异常的文件名。,8.2,m_cause可能为以下值 CFileException:none: 没有错误发生。 CFileException:generic: 未指定的错误。 CFileException:fileNotFound : 文件找不到错误。 CFileException:badPath : 全部或部分路径无效。 CFileException:tooManyOpenFiles:超出允许打开的文件数目。 CFileException:accessDenied : 不能访问文件。 CF

7、ileException:invalidFile : 试图访问一个无效的文件。 CFileException:removeCurrentDir:试图删除正在操作的目录。 CFileException:directoryFull: 目录个数已满。 CFileException:badSeek : 试图设置文件位置指针出错。 CFileException:hardIO : 硬件出错。 CFileException:sharingViolation : 共享出错。 CFileException:lockViolation : 试图锁定已锁定的区域。 CFileException:diskFull :

8、 磁盘空间已满。 CFileException:endOfFile : 到达文件结尾。,例子,8.2,extern char* pFileName; TRY CFile f( pFileName, CFile:modeCreate | CFile:modeWrite ); CATCH( CFileException e ) if( e-m_cause = CFileException:fileNotFound ) printf( “ERROR: File not foundn“); else if( e-m_cause = CFileException: diskFull) printf( “

9、ERROR: Disk fulln“); else if( e-m_cause = CFileException: endOfFile) printf( “ERROR: End Of Filen“); END_CATCH,8.3 诊断服务,8.3,1 使用ASSERT宏 2使用VERIFY宏 3使用TRACE宏,返回第8章,1. 使用ASSERT宏,8.3,这个宏的用法如下: ASSERT( booleanExpression ); 其中的参数booleanExpression是一个表达式或指针。 如果参数不为真,这个宏就显示一个诊断信息对话框,并终止程序的运行。如果参数为真,它不做任何事情。

10、诊断信息按照下面的形式显示:,使用ASSERT宏,8.3,2. 使用VERIFY宏,8.3,这个宏的用法如下: VERIFY( booleanExpression ) ; 其中的参数booleanExpression是一个表达式或指针。 如果参数不为真,这个宏就显示一个诊断信息对话框,并终止程序的运行。如果参数为真,它不做任何事情。诊断信息的显示形式与ASSERT 相同:,ASSERT和VERIFFY两个宏之间的差别,8.3,ASSERT: 仅在MFC的调试(Debug)版本中有效 VERIFFY: 在MFC的发布版本中,它仍对参数进行测试 ,但是当参数为假时,不弹出诊断信息对话框。,3. 使用TRACE 宏,8.3,这个宏的用法如下: TRACE( exp ); TRACE是一个在程序运行时跟踪变量数值的便捷方法,它的用法和Printf完全相同,他的输出是Debug窗口。如:,int m_value=100; for(int i=0;i5;i+) m_value+; TRACE(“m_value = %d“, m_value); ,返回第8章,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号