C++异常处理
来源:互联网 发布:电力系统仿真软件 编辑:程序博客网 时间:2024/05/21 11:18
在讨论C++异常处理之前,先看看一个C语言编程中常见的例子:
#include <stdio.h>
FILE *fp;
Fp=fopen(“test.txt”,”r”);
If(fp==NULL)
{
printf(“Can’t Open File!/n”);
exit(0);
}
一个健壮的程序需要考虑很多会使程序失效的因素,如果对各种因素都进行如上的条件判断,那么整个程序的结构就会变得非常混乱。
C++处理错误的方法由不一样,它有如下特点:
1、 不需要打乱程序的结构,如果没有任何错误产生,那么程序的运行应该不受任何影响。
2、 不依靠函数的返回值来报告错误是否产生。
3、 即使采用集中的方式处理错误,也能够根据错误种类的不同来进行对应的错误处理操作。
下面来看看C++中提供的异常机制是如何做到这几点的。
///---------------------------------------------------------------------------
#include <iostream.h>
#include <vcl.h>
#pragma hdrstop
///---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
double *data;
try
{
data=new double[1000];
}
////std::bad_alloc是new操作符唯一可能发出的异常
catch(std::bad_alloc)
{
cout<<"can't alloc memory!"<<endl;
exit(0);
}
////捕获所有剩下的异常
catch(...)
{
}
delete []data;
ShowMessage("ok");
return 0;
}
///---------------------------------------------------------------------------
使用异常的语法很简单,对所有可能产生异常的语句包含在try块中,并在随后的catch语句中捕获发生的异常。一个try块后可以跟随几个不同的catch语句,用来捕获不同的异常。如果希望捕获任何可能发生的异常,应该使用catch(…)语句。如果希望在自己编写的程序中产生异常,可以按如下的方法:
///---------------------------------------------------------------------------
#include <iostream.h>
#include <vcl.h>
#pragma hdrstop
///---------------------------------------------------------------------------
#pragma argsused
class Out{};
int main(int argc, char* argv[])
{
try
{
throw Out(); ///抛出一个临时的Out对象
}
catch(Out& e) ///捕获Out异常
{
cout<<"Out Exception throwed!"<<endl;
throw; ///向外层抛出异常
}
return 0;
}
///---------------------------------------------------------------------------
利用关键字throw可以抛出任意的对象。这个对象不需要继承exception类。即使是基本类型数据,也可以作为throw的参数抛出。在catch的参数中如果包含一个类似变量声明的表达式,就可以在catch块中使用这个异常对象。如果在catch块中处理完一个异常后,异常造成的后果并不能完全消除,那么可以在catch语句中再次调用catch语句,从而使得捕获向外层传播。如果一个函数中没有处理发生的异常,那么异常将会传播到调用此函数的代码段中。
正文
- c#中的异常处理
- 异常处理 - [C++]
- c异常处理
- Objective-c异常处理
- C语言异常处理
- c 异常处理
- C 异常处理设计
- [C++] 异常处理
- C++“异常处理”
- objective-c 异常处理
- 【C++】栈空栈满异常处理
- C++:异常处理
- c++_10: 异常处理
- 【C#】异常处理
- C/C++异常处理
- C++‘异常’处理机制
- C语言异常处理
- 异常处理---C语言
- 什么时候应该使用 ==?什么时候应该使用 Equals?
- 我眼中的指针--学习指针不可少的好文章
- 指针函数和函数指针有什么区别
- JPEG 简易文档 V2.14
- 关于C++模板和重载的小问题
- C++异常处理
- C/C++中的整型常识
- 浅淡对CString的使用
- win32 API窗口句柄的获得--我的经验
- const用法
- 教你理解复杂的C/C++声明
- windows 系统文件详解
- Window 消息大全使用详解
- BUG:命名空间名称和类名冲突