C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.

Slides:



Advertisements
Similar presentations
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
Advertisements

第 2 章 初探 C++.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第八章 类和对象.
Using C++ The Weird Way Something about c++11 & OOP tricks
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
資料大樓 --談指標與陣列 綠園.
函數(一) 自訂函數、遞迴函數 綠園.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
Scope & Lifetime 前言 Local Scope Global Functions & Objects
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
西安交通大学 计算机教学实验中心 大学C++程序设计教程 西安交通大学 计算机教学实验中心
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
第三章 C++中的C 面向对象程序设计(C++).
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++程序设计 string(字符串类) vector(容器类).
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 第十一章 流类库与输入/输出.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
潘爱民 C++ Overview 潘爱民
C#程序设计基础 $3 成员、变量和常量.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
第十二章 命名空间和异常处理 丘志杰 电子科技大学 计算机学院 软件学院.
Oop8 function函式.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
第二章 Java语法基础.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++程序设计 吉林大学计算机科学与技术(软件)学院.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
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:

C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计

“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 用户自定义类的对象传递异常 异常和异常处理 C++异常处理机制 自定义exception类的派生类对象传递异常 异常和异常处理 C++异常处理机制 用类对象传递异常 异常处理中的退栈和对象析构 C++语言程序设计

编程技能 b C++语言程序设计

(一)用户自定义类的对象传递异常 template <class T, int i> //类模板定义 class MyStack #include <iostream> using namespace std; class StackOverflowException //栈满异常类 {public: StackOverflowException() {} ~StackOverflowException() {} void getMessage() { cout << "异常:栈满,不能入栈。" << endl; } }; class StackEmptyException //栈空异常类 StackEmptyException() {} ~StackEmptyException() {} { cout << "异常:栈空,不能出栈。" << endl; template <class T, int i> //类模板定义 class MyStack { T StackBuffer[i]; int size; int top; public: MyStack( void ) : size( i ) {top = i;}; void push( const T item ); T pop( void ); };

(一)用户自定义类的对象传递异常 C++语言程序设计 void main() //类模板测试程序 { MyStack<int,5> ss; for(int i=0;i<10;i++) {try {if(i%3)cout<<ss.pop()<<endl; else ss.push(i); } catch (StackOverflowException &e) { e.getMessage(); catch (StackEmptyException &e) cout<<"Bye\n"; template <class T, int i> //push成员函数定义 void MyStack< T, i >::push( const T item ) { if( top >0 ) StackBuffer[--top] = item; else throw StackOverflowException(); //抛掷对象异常 return; } template <class T, int i> //pop成员函数定义 T MyStack< T, i >::pop( void ) { if( top < i ) return StackBuffer[top++]; throw StackEmptyException(); //抛掷另一个对象异常 程序执行的结果是: 异常:栈空不能出栈。 3 6 Bye C++语言程序设计

(二)自定义exception类的派生类对象传递异常 定义一个简单的数组类。在数组类中重载“[ ]”运算符,目的是对于数组元素的下标进行检测。如果发现数组元素下标越界,就抛掷一个对象来传递异常。并且要求处理异常时可以显示越界的下标值。 我们使用exception类的对象来传递对象。但是,直接使用exception类对象还是不能满足例题的要求。因为不能传递越界的下标值。 为此,可以定义一个exception类的派生类ArrayOverflow。其中包含一个数据成员k。在构造ArrayOverflow类对象时,用越界的下标值初始化这个数据k。在catch块中捕获到这个对象后,可以设法显示对象的k值。 C++语言程序设计

(二)自定义exception类的派生类对象传递异常 #include <iostream> #include <exception> using namespace std; class ArrayOverflow : public exception //exception类的派生类 {public: ArrayOverflow::ArrayOverflow(int i) : exception( "数组越界异常!\n" ) {k=i;} const char * what() //重新定义的what()函数 {cout<<"数组下标"<<k<<"越界\n"; return exception::what(); } private: int k; }; class MyArray //数组类的定义 { int *p; //数组首地址 int sz; //数组大小 public: MyArray(int s) { p=new int [s]; sz=s; } //构造函数 ~MyArray( ) { delete [ ] p ; } int size( ) { return sz; } int& operator[ ] (int i);//重载[]运算符的原型 }; C++语言程序设计

(二)自定义exception类的派生类对象传递异常 int& MyArray:: operator[ ] (int i) //重载[]运算符 {if(i>=0 && i<sz) return p[i]; throw ArrayOverflow( i ); } void f(MyArray &v); void main() {MyArray A(10); f(A); void f( MyArray& v ) { for(int i=0;i<3;i++) {try { if(i!=1) {v[i]=i; cout<<v[i]<<endl;} else v[v.size( )+10]=10; } catch( ArrayOverflow &r ) {cout<<r.what(); } //for循环结束 程序执行的结果是: 数组下标20越界 数组越界异常! 2 C++语言程序设计