异常处理实例
来源:互联网 发布:码字软件 编辑:程序博客网 时间:2024/05/16 04:34
异常处理实例:
#include <iostream>#include <string>using namespace std;class MyException{public: MyException(const string&message): message(message) {} ~MyException() {} const string &getMessage() const { return message; }private: string message;};class Demo{public: Demo() { cout<<"Constructor of Demo"<<endl; } ~Demo() { cout<<"Destructor of Demo"<<endl; }};void func()throw (MyException)/*异常接口声明:可以在函数的声明中列出这个函数可能抛掷的所有异常类型.若不写异常接口声明,则此函数可以抛掷任何类型的异常。不抛掷任何类型异常的函数声明如下:void fun() throw();*/{ Demo d; cout<<"Throw MyExpection in func"<<endl; throw MyException("exception thrown by func()");///被main中catch接受,赋给e}int main(){ cout<<"In main function"<<endl; try{func();} catch(MyException&e) { cout<<"Caught an exception: "<<e.getMessage()<<endl; } cout<<"Resume the execution of main()"<<endl; return 0;}
#include <bits/stdc++.h>using namespace std;void f2();void f3();void f1(){ try{f2();} catch(char) { cout<<"OK1!"; } cout<<"END1"<<endl;}void f2(){ try{f3();} catch(int) { cout<<"OK2!"<<endl; } cout<<"END2"<<endl;}void f3(){ double a=0; try {throw a;} catch(float) { cout<<"OK3!"<<endl; } cout<<"END3"<<endl;}int main(){ try {f1();} catch(double) { cout<<"OK0!"<<endl; } cout<<"END0"<<endl; return 0;}
1)在main函数的try块中调用f1函数,在f1函数的try块中调用f2函数,在f2函数的try块中义调用f3函数。2)在执行f3函数过程中执行了throw语句,抛出double型异常信息a。由于在f3中没找到和a类型相匹配的catch子句,于是将a抛给f3的调用者f2函数,在f2没有找到和a类型相匹配的catch子句,又将a抛给f2的凋用者f1函数,在f1中没找到和a类刷相匹配的catch子句,又将a抛给f1的调用者main函数。3)而main函数中的try—catch结构中找到和a类型相匹配的catch子句,main中的catch子句就是离throw最近的且与之匹配的catch广句,执行该子句的复合语句,输出”OK0!”,再执行该catch 后的 cout语句。
1、异常处理的语法格式: 1) throw 表达式; 2)try----catch的结构: try {被检查的语句} catch(异常信息类型) {进行异常处理的语句} 说明: (1)被检测的函数调用必须放在try块中,否则不起作用。 (2)try块和catch块作为一个整体出现,catch块是try--catch结构中的一部分,必须紧跟跟在try块之后,不能单独使用,在二者之间不能插入其它语句,
(3)try和catch块必须用花括号括起来的复合语句,即使花括号内只有一个语句也不能省略{ }。(4)一个try—catch结构中只能有一个try块,但却可以有多个catch块,以便与不同的异常信息匹配; 例如:try { } catch (double) catch (int) catch (char) ……….(5)catch后面的圆括号中只写异常信息的类型名,catch只检查所捕获异常信息的类型,而不检查它们的值,例如a,b,c都是double 类型,虽然它们的值不同,但在throw语句中写成throw a、throw b或throw c,作用均相同。注意:异常信息可以是C++预定义的标准类型,也可以是用户自定义的类型(类或结构体)。
(6)如果在catch子句中没指定异常信息类型,而是用“…”,例如 : Catch(…){cout<<“ok”<<endl;} 表示可以捕捉任何类型的异常信息。 注意:这种catch子句应放在所有try--catch结构的最后,相当于其它。如果把它作为第一个catch 子句,则其后的catch字句均不起作用。(7)try—catch结构可以与throw出现在同一个函数中,也可以不出现在同一个函数中,若本函数无catch,则转到上一级处理。
异常借口声明:可以在函数的声明中列出这个函数可能抛掷的所有异常类型。例如:void fun() throw(A,B,C,D);若无异常接口声明,则此函数可以抛掷任何类型的异常。不抛掷任何类型异常的函数声明如下:void fun() throw();
阅读全文
0 0
- java异常处理实例
- C++异常处理实例
- __try__finally异常处理实例
- 实例简介异常处理
- c#异常处理实例
- stuts异常处理实例
- 异常处理实例
- Erlang异常处理实例demo
- java--异常处理的实例
- Windows异常处理实例代码
- 利用异常处理执行shellcode实例
- spring异常处理实例(登录例子)
- c# 异常处理 经典代码实例
- 42.异常处理实例对象的使用
- 用断言来处理异常实例
- mysql数据库异常处理代码实例
- Quartz入门实例6-处理job异常
- IO异常应该如何处理实例
- 一分钟掌握数据库垂直拆分
- 4K分辨率单网无损延长器KE-100HK
- 结巴分词安装与使用
- Tensorflow源码编译,解决tf提示未使用SSE4.1 SSE4.2 AVX警告
- 数据库秒级平滑扩容架构方案
- 异常处理实例
- 乱码问题
- 错误:找不到或无法加载主类 com.pactera.ServerApplication
- python使用scapy报错Traceback (most recent call last):ImportError: No module named all
- python3中,关于Tkinter中Button参数的问题
- 好架构是进化来的,不是设计来的(58架构演进)
- Java邮箱正则表达式
- 几种排序方法比较
- hbase系列-hbase shell操作