设为首页 加入收藏

TOP

C++异常处理机制(二)
2023-07-23 13:27:35 】 浏览:59
Tags:常处理
的执行。throw和return语句不同的是,在执行return语句将返回主调函数,继续执行函数调用语句的下一条语句,而执行throw语句将直接跳转到try子句后面catch子句,开始执行子句的异常捕获及处理操作;return语句时正常退出函数,throw语句则是异常退出。try-catch机制保证异常退出时能自动释放当前函数的形参,局部变量或对象。释放局部对象时会自动调用其析构函数。

??可以看出catch子句所定义的参数相当于函数形参,可以接收throw语句中异常表达式的结果。throw语句中的异常表达式相当于时调用函数的实参。

3、使用类描述异常

??throw语句所抛出的异常可以是基本数据类型、自定义或类类型。类类型可以提供更多的异常信息和异常处理能力。

#include<iostream>
using namespace std;

class Error
{
    public:
        int errCode;  //异常代码
        char errMsg[40];  //异常信息
        Error(int code,char *msg)  //构造函数
        { errCode = code;strcpy(errMsg,msg); }
        void ShowError() //显示异常的详细信息
        { cout << errCode <<":"<<errMsg << endl; }
}

int Div(int n)
{
	if(n<=0)        //检查异常:如果n<0,则属于异常情况
    {	
        Error err(-1,"输入的数据必须是正整数"); //定义异常类,并初始化
        throw (err); 
    } //执行异常处理流程:抛出int型异常err,并退出当前函数执行
	return(100/n);
}
int main()
{
	int a;
	cin >> a;
    try  //通过try保护代码段,接收异常
    {
	    int result = Div(a);
        cout << "100 / " << a << " = "<< result << endl;
    }
    catch(Error e) //捕获Error类的异常,也可以定义成异常类的引用:catch(Error &re) 
    {
		e.ShowError(); //显示异常信息
    catch(...) //捕获任意类型异常
    {
        cout<<"发生了其他异常"<<endl;
    }
    return 0;
}

 4、try-catch异常处理机制的代码框架

try-catch异常处理机制的语法细节:

??1)语句try-catch可以多层嵌套。

??2)计算机执行throw语句,将跳转到包含该throw语句最下一层的catch子句进行异常类型匹配。

??3)语句try-catch可以直接包含throw语句。执行throw语句时的跳转目标实际上时查找最近的catch子句,也就是本函数的函数子句。

??4)子句catch在处理完异常后可以继续抛出异常。再次抛出异常的原因在于,某个异常需要经过不同层级代码多次处理,每个层级只完成整个异常处理环节的一部分。当捕获到的异常再次抛给上层的try-catch,此时throw语句可以不带异常表达式。

??关键字throw可以被用在函数定义或原型声明中,其作用是声明该函数可能抛出的异常列表。其语法形式为:函数类型 函数名(形参列表)throw(异常类型列表);

??示例:

????void fun() throw(A,B,C); //函数fun能却只能抛出A、B或C共三种类型的异常

????void fun() throw();  //函数fun不会抛出任何类型的异常

????void fun();????//函数fun可能会抛出任何类型的异常

 

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Dijkstra算法及其C++实现-云计算.. 下一篇现代C++学习指南-具体类

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目