第6章 异常处理 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.

Slides:



Advertisements
Similar presentations
第 2 章 初探 C++.
Advertisements

第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第八章 类和对象.
C++程序设计 王希 图书馆三楼办公室.
Using C++ The Weird Way Something about c++11 & OOP tricks
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
資料大樓 --談指標與陣列 綠園.
函數(一) 自訂函數、遞迴函數 綠園.
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
第6章 异常的捕获及处理 6.1 异常简介 6.2 异常类的继承结构 6.3 异常处理机制 6.4 异常处理 6.5 本章小结.
第三章 流程控制與例外處理 資訊教育研究室 製作 注意:本投影片僅供上課使用,非經同意,請勿散播或轉載。
第一章 C++编程简介 丘志杰 电子科技大学 计算机学院 软件学院.
计算机网络讲义 第5章 批量数据处理—数组 一维数组 排序和查找 二维数组 字符串.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++程序设计 string(字符串类) vector(容器类).
9.1 程式偵錯 9.2 捕捉例外 9.3 自行拋出例外 9.4 自定例外類別 9.5 多執行緒
C++语言程序设计 第二章 C++简单程序设计.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
Name1..hour //加班時數 name2..hour //請假時數
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
Chapter 2 & Chapter 3.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
程式結構&語法.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
第十二章 命名空间和异常处理 丘志杰 电子科技大学 计算机学院 软件学院.
Oop8 function函式.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
第二章 类型、对象、运算符和表达式.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第 5 章 继承、多态和虚函数 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++面向对象程序设计 谭浩强编著 授课教师:姬广永 学习网站:
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
變數與資料型態  綠園.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第6章 异常处理 陈哲 副教授 南京航空航天大学 计算机科学与技术学院

6.1 异常 float divide(int numer, int div ) { if ( div == 0 ) 6.1 异常 异常是在程序执行期间的突发性事件。 异常与错误不同,错误可通过编译系统处理。 1. 抛出异常 . Example: float divide(int numer, int div ) { if ( div == 0 ) throw "ERROR: divide by zero. \n"; else return float (numer) / div; }

6.1 异常 (continued) 2. 处理异常。 try { // 可能出现异常的程序代码 } catch( exception param1 ) { // 处理异常类型1的代码 catch( exception param2 ) // 处理异常类型2的代码 // 异常处理结束后,继续执行的代码

// 例6-1 #include <iostream> using namespace std; float divide(int number, int div) { if (div == 0) throw "ERROR: divide by zero.\n"; else return float(number) / div; }

cout << "Enter two numbers: "; cin >> num1 >> num2; void main( ) { int num1, num2; float quotient; cout << "Enter two numbers: "; cin >> num1 >> num2; try { quotient = divide(num1, num2); cout << "The quotient is " << quotient; }catch (char *exceptionString) { cout << exceptionString; } cout << "\nEnd of the program.\n"; 思考:如果不处理又怎么样? 6-1.cpp

6.1 异常 (continued) 异常处理失败的原因: try语句块中实际产生的异常,与catch语句圆括号指定要捕捉的异常类型不匹配; try语句块的范围太小,在try语句之前就已经产生了异常,那么后面的try语句块将不再执行。

6.2 基于对象的异常处理 C++除了支持基本类型的异常处理外,还支持面向对象的异常处理。 6.2 基于对象的异常处理 C++除了支持基本类型的异常处理外,还支持面向对象的异常处理。 C++在处理多种类型的异常时,要求这些异常对象必须属于不同类型,并且对每种类型的异常都要编写一段对应的catch代码。 例如:6-3

{ int input, lower , upper; public: class TooLow{ }; class IntRange { int input, lower , upper; public: class TooLow{ }; class TooHigh{ } ; IntRange( int low, int high ) { lower = low; upper = high; } int getInput( ) { cin >> input; if (input < lower) throw TooLow( ); else if (input > upper) throw TooHigh( ); return input; } }; 新思想:基于对象的异常处理

cout << "输入一个5-10之间的值:" ; try { userValue = range.getInput( ) ; void main( ) { IntRange range( 5 , 10 ) ; int userValue ; cout << "输入一个5-10之间的值:" ; try { userValue = range.getInput( ) ; cout << "你输入的是" << userValue << endl ; }catch( IntRange :: TooLow ) { cout << "输入值小于下限\n" ; }catch( IntRange :: TooHigh ) { cout << "输入值大于上限\n" ; } cout << "程序结束\n" ; 6-3.cpp

6.4 通过异常对象获取异常信息 可以通过异常对象将异常信息传递给异常处理者。 例如:例6-4

class IntRange3 { int input, lower , upper; public: class OutOfRange { public: int value; OutOfRange( int i ){ value = i; } }; IntRange3(int l, int h){ lower=l; upper=h; } int getInput( ) { cin >> input; if (input < lower || input > upper) throw OutOfRange(input); return input; }

cout << "输入一个5-10之间的值:" ; try { userValue = range.getInput( ) ; void main( ) { IntRange3 range( 5 , 10 ) ; int userValue ; cout << "输入一个5-10之间的值:" ; try { userValue = range.getInput( ) ; cout << "你输入的是" << userValue << endl ; } catch( IntRange3 :: OutOfRange ex ) { cout << "输入值" << ex.value << " 越界\n" ; } cout << "程序结束\n" ; 6-4.cpp

注意 一旦程序抛出异常,即使在异常处理以后,程序也不能回到原来的抛出点继续执行,这是因为C++采用的是不可恢复的异常处理模型。 一旦程序抛出异常,执行throw语句的函数将立即停止执行。如果该函数被另外一个函数调用,那么调用者函数也将停止执行,其它依次类推。 如果在try块中创建有对象,并且这些对象还未来得及析构,那么将对这些对象立即调用析构函数。

6.5 再次抛出异常 try{ doSomethingElse( ) ; } catch( exceptionl ) { 6.5 再次抛出异常 try{ doSomethingElse( ) ; } catch( exceptionl ) { throw; // 再次抛出异常,由上层try处理 catch( exception3 ) // 处理exception 3的代码