第1章 C++程序设计基础 网络游戏开发-C++程序设计.

Slides:



Advertisements
Similar presentations
面向对象程序设计 QQ群: Object-Oriented Programming 汽车学院.
Advertisements

C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
第九章 字符串.
Using C++ The Weird Way Something about c++11 & OOP tricks
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
高级语言程序设计 主讲人:陈玉华.
C#程序设计基础 $5 流程控制.
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第5章 异常处理 王德俊 上海交通大学继续教育学院.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
第二章 Java语言基础.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第4章 PHP流程控制语句.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
$9 泛型基础.
C#面向对象程序设计 $6 深入理解类.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
第十二章 命名空间和异常处理 丘志杰 电子科技大学 计算机学院 软件学院.
Oop8 function函式.
分裂对象模型 C++ otcl.
第12章 异常处理 C++自身有着非常强的纠错能力,发展到如今,已经建立了比较完善的异常处理机制. C++的异常情况无非两种,一种是语法错误,即程序中出现了错误的语句、函数结构和类,致使编译程序无法进行。另一种是运行时发生的错误,一般与算法有关。 关于语法错误, C++编译器的报错机制可以让我们轻松地解决这些错误;
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
第4章 Excel电子表格制作软件 4.4 函数(一).
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
第二章 Java语法基础.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
第二章 类型、对象、运算符和表达式.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
本节内容 指针类型.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
3.7 Java的异常处理机制.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 学习网站:
第6章 异常处理 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
顺序结构程序设计 ——关于“字符串”和数值.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第1章 C++程序设计基础 网络游戏开发-C++程序设计

第10章 异常处理 异常处理的概念 异常处理的机制 多层级间的异常处理 异常处理的堆栈操作 异常处理的机制和实现 多层级间的异常处理 了解异常处理的机制 掌握异常处理的方法 掌握多层级间的异常处理方法 了解异常处理中的堆栈操作

第10章 异常处理 10.1异常处理在C++中的实现 10.1.1 异常处理的概念和使用条件 程序运行中的某些错误(或意外情况)不可避免但可以预料。 例如,做除法或模运算时使用的除数为0。 if(y==0){ cout<<"Error occuring -- Divided by 0!";exit(1);}

第10章 异常处理 10.1异常处理在C++中的实现 10.1.1 异常处理的概念和使用条件 异常处理的特点: 1)当引发异常时,要提供有意义的文本; 2)只在必要时才会引发异常; 3)当函数的参数不符合条件时,不引发异常; 4)不能为正常的错误或可预期的错误产生异常

第10章 异常处理 10.1异常处理在C++中的实现 10.1.2 异常处理的实现 C++中提供的对异常进行处理的机制,那就是在程序中使用try、catch和throw。 通过throw抛掷异常后, 系统将跳转到与所抛掷的实参(表达式)类型完全匹配的catch块,执行完catch块后将不再返回,继而转到catch块序列的最后一个catch 块的下一语句处去执行。

第10章 异常处理 10.1异常处理在C++中的实现 10.1.2 异常处理的实现 try块 通过try可构成try块,用于标记运行时可能出现异常的程序代码。 异常来源: try 块中直接抛掷的异常 通过所调用的“下层”函数而间接抛掷的各种异常 注意:抛掷异常是通过throw 语句来完成的。 try { "受监控“ 的语句序列(通常包含抛掷异常的throw 语句) }

第10章 异常处理 10.1异常处理在C++中的实现 10.1.2 异常处理的实现 catch块 通过catch可构成catch块,它紧跟在try块的后面 用于监视并捕获运行时可能出现的某一种类(类型)的异常, 对此种异常进行具体的处理(处理程序代码包含在catch块之中)。 catch (欲捕获的异常类型及形参名字) { 对该类型异常的具体处理语句序列 }

第9章 模板与STL 10.1异常处理在C++中的实现 10.1.2 异常处理的实现 catch块 可以只给出异常类型,这适合于异常处理中不使用形参的情况 允许捕获任何类型的异常,在catch 块首括号用省略号代替参数(即“...”) 以省略号为参数的catch 块应该在其他catch块之后,否则,其后的所有catch 块都将起不到任何作用。

第10章 异常处理 10.1异常处理在C++中的实现 10.1.2 异常处理的实现 throw 表达式 表达式:一个变量或对象、一个常量或字符串等 系统将根据表达式的值类型来与各catch块首括号中形参的异常类型进行“对比”, 若“匹配”成功(要求类型完全一致,系统并不自动进行类型转换),则跳转到那一catch块去执行,即进行相应的异常处理; 若所有匹配都不成功,则将自动去执行一个隐含的系统函数“abort()”来终止整个程序的运行。

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.1 多级多层处理的机制 1)允许抛掷异常的语句处于被调用函数中,而catch语句位于主调函数中。 unsigned short numMul(unsigned short sNum1, unsigned short sNum2) { int nExc = 0; unsigned short sProduct = sNum1 * sNum2; // 当结果超出数据表达范围时就抛出异常 if ( sProduct < sNum1 || sProduct < sNum2) { throw nExc; } else { return sProduct; }

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.1 多级多层处理的机制 int _tmain(int argc, _TCHAR* argv[]) { unsigned short s1 = 50000, s2 = 40000; unsigned short sProduct; try { sProduct = numMul(s1, s2); printf("乘积=%d\n", sProduct); } catch (int nExc) { printf("错误代码为:%d\n", nExc); } return 0;

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.1 多级多层处理的机制 2)允许在同一程序中使用多个try块,而且这些try块可以处于不同的位置并具有不同的层次级别。

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.2 多级多层处理的综合实例 #include <iostream> using namespace std; class myExcepCla { //自定义的myExcepCla 类(类型) char message[100]; public: myExcepCla(char* msg) { //构造函数,实参带来私有字符串数据message strcpy(message, msg); } char* GetErrMsg() { //成员函数,获取私有数据message 字符串 return message; }; void InData(); //函数原型

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.2 多级多层处理的综合实例 void main() { try InData(); //调用自定义函数InData,其中可能抛掷异常 cout<<"End try block!"<<endl; } catch (char * str) //捕获“char *”类型的异常并进行处理 cout<<"main-catch::"<<str<<endl; catch (myExcepCla ob) //捕获“myExcepCla”类型的异常并进行处理 cout<<"main-catch::"<<ob.GetErrMsg()<<endl;

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.2 多级多层处理的综合实例 catch ( ... ) { //捕获“其他”任何异常并进行处理 cout<<"main-catch::"<<"Caught unknown exception!"<<endl; } cout<<"End main function!"<<endl; //本层次的某个异常处理结束后, //均转到此处执行该语句 void f(int val) //自定义函数f,负责判断val 是否为11 或22, if(val==11) //输入值为11,抛掷一个int 型异常 throw val; if(val==22) //输入值为22,抛掷一个double 型异常 throw 123.86;

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.2 多级多层处理的综合实例 void InData() { int val; cout<<"Input a INTEGER(from -50 -- 50, excpt 0 、11、22):"; cin>>val; if (val==0) //若输入值等于0,抛掷“char*”类异常,在main 中被捕获处理。 throw "Exception : value equal 0!"; try { //处于InData 中的try 程序块,它为“受监控”的另一个程序块 if (val<-50) myExcepCla exc("Exception : value less than -50!"); throw exc; //该异常将被main 中try 后的“catch (myExcepCla ob)” } if (val>50) throw "Exception : value greater than 50!"; //在本try 后的catch 块序列中被捕获处理 else f(val); //被调函数f 中可能抛掷异常 cout<<"OK! value="<<val<<endl; //不发生异常时,屏幕显示出输入值val

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.2 多级多层处理的综合实例 catch (int i) { cout<<"InData-catch::"<<"Caught INT exception! i="<<i<<endl; } catch (char * str) //捕获“char *”类型的异常并进行处理 cout<<"InData-catch::"<<str<<endl;

第10章 异常处理 10.2多级多层捕获与处理机制 10.2.2 多级多层处理的综合实例 注意: 异常被某一个层次的catch块所捕获,程序执行完catch块代码后, 将从其所在的块序列之后的下一语句处继续执行。

第10章 异常处理 10.3 异常处理中的堆栈展开 堆栈展开的原因: 执行完catch块后将不再返回到throw语句之后,继而转到catch块序列的最后一个catch块的“下一语句”处去执行。 throw的“跳转”实际上相当于跳出了所在作用域,所以系统将自动检查在那些作用域中已经构造但尚未析构的处于堆栈中的局部对象(与变量),并自动进行相应的退栈与析构处理。

检查try块的已构造但尚未析构的堆栈中的局部对象 第10章 异常处理 10.3 异常处理中的堆栈展开 堆栈展开的过程 抛掷异常 找到catch块 对 “形参”进行“初始化” 检查try块的已构造但尚未析构的堆栈中的局部对象 局部对象退栈与析构 执行catch块代码

第10章 异常处理 10.3 异常处理中的堆栈展开 异常的适用范围 在C++程序设计中有一些和异常处理的用法相关的设计事项 因为抛出异常不像正常函数调用那样快, 所以异常处理应该用在独立开发的不同程序部分之间用于不正常情况的通信

第10章 异常处理 小结 本章主要讲解异常处理的基础知识 异常处理的概念 异常处理的机制 多层级间的异常处理 异常处理的堆栈操作

第10章 异常处理 自测题 1.当程序中产生异常时,程序一定会被强制结束。( ) 2.异常只在try块中产生,在非try块中不会产生。( ) 1.当程序中产生异常时,程序一定会被强制结束。( ) 2.异常只在try块中产生,在非try块中不会产生。( ) 3.在catch 块首括号中仅写上3 个点符号(即“...”)时此块不处理任何异常。( ) 4.若try块后找不到相应的catch块来处理异常,则程序将忽略这个异常继续运行。( ) 5.在同一程序中,try块的数量一定和catch块的数量一样多。( )

第10章 异常处理 自测题 1.当程序中产生异常时,程序一定会被强制结束。( X ) 2.异常只在try块中产生,在非try块中不会产生。( X ) 3.在catch 块首括号中仅写上3 个点符号(即“...”)时此块不处理任何异常。( X ) 4.若try块后找不到相应的catch块来处理异常,则程序将忽略这个异常继续运行。( X ) 5.在同一程序中,try块的数量一定和catch块的数量一样多。( X )

第10章 异常处理 课后作业 【作业1】输入一组数,实现一个累加和函数,当累加和超过数据的表示范围时,产生异常。