写在前面:本文章来自于在学习过程中的总结,供大家参考。因水平有限,博客中难免会有不足,恳请大佬们不吝赐教!
相关文章:
[C++系列]小白的C++入门教程
C++标准程序库异常处理
在我们平时写程序时,一般都是先假定不会出现异乎寻常或不正确的结果。可是有的时候,用户不一定按照我们指定的方式使用,当出现错误的时候,难道程序直接崩溃吗?用户肯定不喜欢这样的程序。
C++的异常处理机制就解决了这个问题。异常最重要的用途就是处理可能会遇到特殊情况的函数。
在C++中,异常处理的过程时:某个库软件或你的代码提供了一种机制,能在出现异常情况的地方发出信号。这称为抛出异常。在程序的另一个地方,需添加合适的代码处理异常情况。这称为处理异常。
异常处理的简单例子:
#include <iostream>
using namespace std;
int main()
{
int x, y; //x为分母,y为分子
double result;
try
{
cout << "Please input x:";
cin >> x;
cout << "Please input y:";
cin >> y;
if (x == 0)
{
throw x;
}
result = (double)y / (double)x;
cout << "result = " << result << endl;
}
catch (int e)
{
cout << "异常处理:分母x为" << e << endl;
}
return 0;
}
一、try语句
try
{
Code_To_Try // 要尝试的代码
Possibly_throw_An_Exception // 可能抛出异常
More_Code //更多的代码
}
二、throw语句
语法
throw Expression_for_Value_to_Be_Throw;
示例
if(x==0)
throw x;
有时候抛出的值直接就称为异常,所以执行throw语句就称为抛出异常。
正如throw这个名称所暗示的,某样东西被“抛出”后,或从一个地方转移到另一个地方。在C++中,从一个地方转移到另一个地方的时“控制权”(以及抛出的值)。抛出异常后,throw语句所在的try块会停止执行,并开始执行catch块的代码。执行catch块的过程被称为捕捉异常或处理异常。
三、catch语句
catch (int e)
{
cout << "异常处理:分母x为" << e << endl;
}
通常的,把catch块称为异常处理程序。
catch块参数是catch块头部中的标识符,是可能抛出的异常(一个值)的占位符。一旦前面的try块抛出一个合适的值,该值就会传给catch的参数。catch参数课为任何合法(非保留字)标识符。
四、定义自己的异常类
我们一个自己的异常类,它的对象专门容纳抛出给catch块的信息。
实例:
#include <iostream>
using namespace std;
class MyException //自定义异常处理类
{
public:
MyException(const string&message):message(message)
{}
~MyException() {}
const string getMessage()const
{
return message;
}
private:
string message;
};
class Demo //测试类
{
public:
Demo() { cout << "Constructor of Demo" << endl; }
~Demo() { cout << "Destructor of Demo" << endl; }
};
void func()
{
Demo d;
cout << "throw Exception in func()" << endl;
throw MyException("exception throw by func()");
}
int main()
{
try
{
func();
}
catch (MyException &e)
{
cout << "Caught an exception:" << e.getMessage() << endl;
}
return 0;
}
输出:
Constructor of Demo
throw Exception in func()
Destructor of Demo
Caught an exception:exception throw by func()
如实例所示,在try中抛出异常时会自动析构一些已有的类(例中的Demo d)。
由于水平有限,博客难免会有不足,恳请大佬们不吝赐教!