您的位置:首页 > 编程语言 > C语言/C++

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

2014-12-02 23:40 323 查看
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)异常处理虽然很重要,但会增加编程的工作量,增大程序,降低程序的速度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: