如何定义自己的异常类
2016-08-03 09:56
197 查看
转载自:http://blog.csdn.net/everpenny/article/details/6654959
相信很多朋友在写代码的过程中,都会需要加入大量的try和catch来扑捉异常信息和处理异常操作。比如程序在发布出去之后,程序可能出现这样或者那样的问题,如果在代码中加入了异常的操作之后,可以方便定位问题。
1.首先要定义自己的异常操作类,比如你可能会有这样的需求,需要记录抛出异常的文件名,异常的行号,以及自己定义的错误信息,例如指针为空等各式各样的错误。下面请看如下代码:
2.异常类写好之后,你就可以在实际的代码中使用你自己定义的异常对象了。比如下面我写了一个简单使用的示例代码
这样就可以使用我们自己DIY的异常类了,当然我们这里只是简单的讲述了一种使用方式,实际情况还要根据你的具体情况而来。如果代码非常多,要捕获和处理的异常也非常多的话,这样写代码就看起来不那么见解好看了,所以下面会改写一下上述代码。
3.巧妙使用宏来改写抛出异常以及捕获异常代码
首先我们先定义两个宏
改写上述的使用代码
这样来看是不是简介明了了很多呢。好了,学习不在于生搬硬套,而是在于举一反三。希望大家能各抒己见,不足之处请大家指正。
相信很多朋友在写代码的过程中,都会需要加入大量的try和catch来扑捉异常信息和处理异常操作。比如程序在发布出去之后,程序可能出现这样或者那样的问题,如果在代码中加入了异常的操作之后,可以方便定位问题。
1.首先要定义自己的异常操作类,比如你可能会有这样的需求,需要记录抛出异常的文件名,异常的行号,以及自己定义的错误信息,例如指针为空等各式各样的错误。下面请看如下代码:
class MyExcepction { public: MyExcepction(int errorId,string err_info, int err_line,string err_file) { m_errorId = errorId; // 错误Code,可以是你自己定义的err code m_errorLine = err_line;// 发生错误的行号 m_errorInfo = err_info;// 发生错误的信息 m_errorFile = err_file;// 错误的文件名 } MyExcepction( MyExcepction& myExp) // 拷贝构造函数 { this->m_errorId = myExp.m_errorId; this->m_errorFile = myExp.m_errorFile; this->m_errorLine = myExp.m_errorLine; this->m_errorInfo = myExp.m_errorInfo; } ~MyExcepction() { std::cout << "~MyExcepction is called" << std::endl; } // 打印错误信息,你自己可以DIY,比如可以以写Log的形式记录下来。 void PrintErrorInfo() { cout << "err file " << m_errorFile << "\n" << "err line " << m_errorLine << "\n" << "err code " << m_errorId <<"\n" << "err info " << m_errorInfo << endl; } private: int m_errorId; int m_errorLine; string m_errorInfo; string m_errorFile; };
2.异常类写好之后,你就可以在实际的代码中使用你自己定义的异常对象了。比如下面我写了一个简单使用的示例代码
int main(int argc, char* argv[]) { int throwErrorCode = 100; cin >> throwErrorCode; try{ if(throwErrorCode == 100){ throw MyException(throwErrorCode,"err code 100", __LINE__, __FILE__); } else throw MyException(throwErrorCode, "err code unknow", __LINE__, __FILE__); }catch(MyException &exp) { exp.PrintErrorInfo(); //return -1; } getchar();// 暂停 return 0; }
这样就可以使用我们自己DIY的异常类了,当然我们这里只是简单的讲述了一种使用方式,实际情况还要根据你的具体情况而来。如果代码非常多,要捕获和处理的异常也非常多的话,这样写代码就看起来不那么见解好看了,所以下面会改写一下上述代码。
3.巧妙使用宏来改写抛出异常以及捕获异常代码
首先我们先定义两个宏
#define ThrowExp(code, msg) throw MyExcepction(code, msg, __LINE__, __FILE__) #define CatchMyExp() catch(MyException &exception) {exception.PrintErrorInfo();}
改写上述的使用代码
int main(int argc, char* argv[]) { int throwErrorCode = 100; cin >> throwErrorCode; try{ if(throwErrorCode == 100){ ThrowExp(110, "throwErrorCode == 110"); } else ThrowExp(throwErrorCode, "error code unknow"); }CatchMyExp(); getchar(); return 0; }
这样来看是不是简介明了了很多呢。好了,学习不在于生搬硬套,而是在于举一反三。希望大家能各抒己见,不足之处请大家指正。
相关文章推荐
- 如何定义自己的异常类
- 如何在ViewState中保存和取出自己定义的类
- 定义自己的异常
- 【JTharness4_4_0】【6.如何定义自己的Interview】
- 如何自己定义RetargetAction
- 请教:MTK android 如何定义自己的模块宏
- 如何在异常中添加自己想要的信息
- rcp(插件开发) 如何查找自己定义的扩展点
- solr中如何定义自己的解析器插件(QParserPlugin)
- 如何自己处理程序异常
- 如何定义一个自己的可复用的JS文件
- [MSSQL] 如何自己定义函数(返回多变量)
- 如何定义你自己的JavaScript类
- CTreeCtrl如何设置和获取自己定义的数据
- 【JTharness4_4_0】【5.如何定义自己的Finder】
- 如何通过序列化在网络间传递对象,网络协议:轻松定义自己的网络通讯协议
- Rails框架技术讲座:如何定义自己的Rails应用软件入门位置
- Java如何定义自己的exception
- srping security3.0(一)----登陆不能抛出自己定义的异常,用户不存在异常,用户尝试登陆次数过多,回到登陆之前访问的页面
- Android 如何自己定义控件的样式 Shape