跳转至

C++异常

1 用throw抛出异常

在需要抛异常的地方使用throw - throw +基本类型 - throw +对象或指针

class badMesg
{
public:
    void operator ()() {
        cout << "异常badMesg" << endl;
    }
};
bool fun(int val)
{
    if (val == 0)
        throw "异常0";
    else if (val == 1)
        throw 1;
    else if (val == 2)
        throw badMesg();
    else if (val == 3)
        throw new badMesg();
    return true;

}

2 用try catch语句捕获异常

int main(int argc, char* argv[])
{
    vector<int> vi{ 0,1,2,3 };
    for (auto& elm : vi)
    {
        try {
            bool b = fun(elm);
        }
        catch (const char* m)
        {
            cout << m << endl;
        }
        catch (int& m)
        {
            cout << m << endl;;
        }
        catch (badMesg & m)
        {
            m();
            //m.operator();
        }
        catch (badMesg * m)
        {
            cout << "指针:";
            (*m)();
            //m->operator();
        }

    }
}

以上代码执行或打印出如下信息

异常0
1
异常badMesg
指针:异常badMesg

3 继承exception类实现自己的异常类

  1. 继承exception
  2. 重写what方法
class myException:public exception
{
    const char* what(){return "抛出myException异常";}
};
bool fun(int val)
{
    if (val == 0)
        throw myException();
    else if (val == 1)
        throw new myException();
    return true;

}
int main(int argc, char* argv[])
{
    vector<int> vi{ 0,1,2,3 };
    for (auto& elm : vi)
    {
        try {
            bool b = fun(elm);
        }
        catch (exception& e)
        {
            cout << e.what() << endl;
        }
        catch (exception* e)
        {
            cout << e->what() << endl;
        }
    }
}