15C++程序设计第十五讲研讨.ppt

15C程序设计第十五讲研讨

意外情况的处理 打开一个不可用的文件 请求过多内存 遭遇不能容忍的值 除数为零 …… 示例 计算两个数的调和平均数 两个数字倒数的平均值的倒数 2.0 * x * y / (x + y) 如果y是x的负值,则上述公式将导致被零除 方法一 调用abort()函数 原型位于cstdlib中 典型实现是向标准错误流(cerr)发送消息,然后直接终止程序 参看代码:error1.cpp 为避免异常终止,应在调用之前检查x、y的值 依靠程序员来执行这种检查是不安全的 方法二 用函数的返回值来指出问题 使用指针参数或引用参数来将值返回给调用程序,并指出成功还是失败 参看代码:error2.cpp 避免了错误输入导致的恶果,使用户可以继续输入 异常机制 C++异常机制是对程序运行过程中发生的异常情况的一种响应。 对异常的处理由三个组成部分: 引发异常 捕获有处理程序的异常 使用try块 引发异常 throw语句 命令程序跳到另一条语句 表示引发异常,紧随其后的值指出了异常的特征 捕获有异常处理程序的异常 catch关键字表示捕获异常 以catch开头,随后是位于括号中的类型声明,指出异常处理器要响应的异常类型,然后是花括号括起来的代码块,指出要采取的措施 使用try块 try块标识其中特定的异常可能被激活的代码块 后面跟一个或多个catch块 关键字try后面是一个由花括号括起的代码块,表明需要注意这些代码引起的异常。 参看代码:error3.cpp 异常的多功能性 try块使得能够选择检查哪些代码的异常,而处理程序使得能制定采取何种措施。 可以异常规范来限定函数定义,指出函数将引发哪些类型的异常 catch块可以处理多个异常源 异常规范 异常规范由关键字throw和紧随其后的异常类型列表组成,异常类型被括在括号中,并用逗号隔开。 double hmean (double a, double b) throw (const char *) 首先,它告诉编译器,该函数引发了哪些类型的异常 其次,提醒阅读该原型的人,该函数引发异常,应提供try块和处理程序 如果异常规范中的括号为空,表明该函数不会引发异常。 示例 参看代码:error4.cpp 增加计算两个数的几何平均数,即乘积的平方根 参数为负数,可能引发异常 堆栈解退 假设try块没有直接调用引发异常的函数,而是调用对引发异常的函数进行调用的函数,如果函数因为出现异常而终止,则程序释放堆栈中的内存,且不会在释放堆栈的第一个返回地址后停止,而是继续释放,直到找到一个位于try块中的返回地址,随后控制权将转到块尾的异常处理程序。 处理try块和throw之间整个函数调用序列放在堆栈中的对象。 异常和类 使用异常的通常做法是,将异常作为对象来引发,并通过引用来捕获。 当异常为类时,则将异常类型定义为嵌套类,这样不仅可以指出异常源,而且有助于防止名称冲突。 异常和继承 继承和异常交互的方式有两种: 如果类以公有的方式嵌套了异常类,则派生类将继承这些异常类 可以从现有的异常类派生出新的异常类 Exception类 exception头文件定义了exception类,可以作为其他异常类的基类。 其中有一个名为what()的虚拟成员函数,返回一个字符串,随实现而定。 new引发bad_alloc异常,头文件new包含了bad_alloc类的声明,它是从exception类公有派生而来的 参看代码:newexcp.cpp 异常的缺点 增加程序代码 降低运行速度 编译器的支持并没有完全成熟 学习的复杂性较高 XML概述 基本概念 XML(eXtensible Markup Language)是Web上的一种表示结构化信息的标准文本格式。 - SGML(Standard Generalized Markup Language)的一个子集,具备SGML的核心特征:可扩展性,结构化,有效性。 - 具备HTML的简单性 - 使内容与表现分离 - 提供了一种方案,但不是最终解决方案,没有通用的XML浏览器 XML基本语法 XML文件的基本构成单元是实体(Entity),包括解析的和未解析的(原始文本) ?xml version=“1.0” encoding=“utf-8” ? 处理指令 ! DOCTYPE students SYSTEM “students.dtd” 文件类型声明 ! ENTITY apos “#39;” 实体引用 students 标记 !-- comment goes here -- 注释 … … ! [CDATA[ CDATA片段 tag/ ]] /students XML的数据模型 一种schema技术,描述XML文件的信息结构,建立文件内容

文档评论(0)

1亿VIP精品文档

相关文档