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类实现自己的异常类¶
- 继承
exception
类 - 重写
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;
}
}
}