异常处理

异常处理

1.抛出异常(Throwing an Exception)

    异常处理机制主要有两个主要成分:异常的鉴定和发出
    成员函数和非成员函数均可能产生异常和处理异常,异常出现以后,程序的正常执行被暂停(suspended),于此同时,异常处理机制会开始搜索程序中有能力处理这一异常的位置,异常被处理完毕后,程序会继续(resume)从异常点执行下去;

void overflowfun()
{
	cout<<“iterator overflow”<<endl;
}

void nomalfun(){}

inline void Aclass::
func()
{
	if(b>=20)
		 throw overflowfun();//若有异常抛出则不执行下面的nomalfun
	nomalfun();    
}

    异常是种对象,最简单的异常是整数或者字符串

throw 42;//异常为整数
throw "panic: no buffer;";//异常对象问字符串

2.捕获异常(Catching an Exception)

    catch子句用来捕获被抛出的异常对象。
    catch子句由三部分组成:

  • 关键字catch;
  • 小括号()内的一个类型或对象;
  • 大括号{}内的一组语句,用于异常处理;
        catch catch 捕获到与之相对应的异常时,执行{}中的异常处理语句;
class A
{};
//捕获到整数的异常
bool some_function
{
	bool status=true;
	catch(int a )
	{
		fun1();//处理异常函数
	}
	//捕获到字符串的异常
	catch(const char * str )
	{
		fun2();//处理异常函数
	}
	//捕获到类对象的异常
	catch(A &a)
	{
		fun3();//处理异常函数
	}
	return status;
}

    如果想要捕获任何类型的异常,只需在异常声明部分制定(…)即可;如下所示:

catch(...)//捕获任何类型的异常
{
	fun();
}

3.提炼异常(Trying for an Exception)

    try块与catch子句相应而生。try块以关键字try开始,后接大括号{},大括号内有一连串的程序语句;catch子句放在try块的末尾,若try块中有任何异常发生时,接下来由catch子句中的语句进行处理。

...
try//里面要有能抛出异常的语句,throw ···
{
	while (frist!=last)
	{
		if(*frist==elme)
			std::cout<<"hahahaha"<<std::endl;
		++first;
	}
}
catch(A &a)//try块内有任何异常抛出,我们只捕获类型为A的异常
{
	fun3();//任意代码均可
}
...

4.标准异常类(The Standard Exception)

  1. bad_alloc异常对象 :
    new表达式无法从程序的空闲空间中分配足够的内存时,将会抛出bad_alloc异常对象。new表达式无法从程序的空闲空间中分配足够的内存时,将会抛出bad_alloc异常对象。

  2. 标准异常类exception
    标准库提供一套异常类,名为exception的抽象基类,我们自己的异常类可以继承于他。

//标准异常类的头文件
#include<exception>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值