首页 > 代码库 > C++学习笔记--异常简介

C++学习笔记--异常简介

C++异常是对程序运行过程中发生的异常情况(如被0除)的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。

1、对异常的处理有3个部分组成:

(1)引发异常

(2)捕获有处理程序的异常

(3)使用try块

C++异常的简单例子:

double hmean(double a,double b){	if (a == -b)		throw "bad hmean() arguments: a = -b not allowed";//引发异常	return 2.0 * a * b / (a + b);}void test_exception(){	double x, y, z;	cout << "Enter two number:";	while (cin >> x >> y)	{		//使用try catch进行异常捕获和处理		try		{			z = hmean(x,y);		}		catch (const char * s)		{			cout << s << endl;			cout << "Enter a new pair of numbers:";			continue;		}		cout << "Result:" << z << endl;		cout << "Enter next two numbers:";	}	cout << "Quit";}

 运行情况如下:

异常类型可以是字符串或其他C++类型,通常为类类型。

将类对象作为异常类型的例子:

class bad_hmean{private:	double v1;	double v2;public:	bad_hmean(int a = 0, int b = 0)		:v1(a)		,v2(b)	{	}	void mesg()	{		cout << "hmean(" << v1 << "," << v2 << "):" << "Invalid arguments: a = -b\n";	}};//使用异常规范对函数定义进行限定,指出它将引发那些类型的异常double hmean(double a,double b) throw(bad_hmean){	if (a == -b)		throw bad_hmean(a,b);//引发异常	return 2.0 * a * b / (a + b);}void test_exception(){	double x, y, z;	cout << "Enter two number:";	while (cin >> x >> y)	{		//使用try catch进行异常捕获和处理		try		{			z = hmean(x,y);		}		catch (bad_hmean & bh)		{			bh.mesg();			cout << "Enter a new pair of numbers:";			continue;		}		cout << "Result:" << z << endl;		cout << "Enter next two numbers:";	}	cout << "Quit";}

 

2、exception异常类

在C++中,exception通常作为其他异常类的基类

C++基本异常类的层次结构:

exception:

--logic_error  (典型的逻辑错误)

      domain_error  (参数不在定义的范围)

      invalid_argument (非法的参数)

      length_error (没有足够空间来执行所需操作)

      out_of_bounds (索引错误)

--runtime_error (运行期间发生但难以预计和防范的错误)

      range_error

  overflow_error

      underflow_error

--bad_alloc 内存分配导致的异常

如果上述异常类,无法满足要求,应当从logic_error 或runtime_error派生一个异常类,以确保自定义的异常类可以归入同一个继承层次结构中。

 

关于异常需要注意的地方:

(1)异常规范不适用于模版,因为模版函数引发的异常可能随特定的具体化而异。

(2)异常处理虽然很重要,但会增加编程的工作量,增大程序,降低程序的速度。

 

C++学习笔记--异常简介