如何定义自己的异常类
2011-08-02 20:38
288 查看
相信很多朋友在写代码的过程中,都会需要加入大量的try和catch来扑捉异常信息和处理异常操作。比如程序在发布出去之后,程序可能出现这样或者那样的问题,如果在代码中加入了异常的操作之后,可以方便定位问题。
1.首先要定义自己的异常操作类,比如你可能会有这样的需求,需要记录抛出异常的文件名,异常的行号,以及自己定义的错误信息,例如指针为空等各式各样的错误。下面请看如下代码:
2.异常类写好之后,你就可以在实际的代码中使用你自己定义的异常对象了。比如下面我写了一个简单使用的示例代码
这样就可以使用我们自己DIY的异常类了,当然我们这里只是简单的讲述了一种使用方式,实际情况还要根据你的具体情况而来。如果代码非常多,要捕获和处理的异常也非常多的话,这样写代码就看起来不那么见解好看了,所以下面会改写一下上述代码。
3.巧妙使用宏来改写抛出异常以及捕获异常代码
首先我们先定义两个宏
改写上述的使用代码
这样来看是不是简介明了了很多呢。好了,学习不在于生搬硬套,而是在于举一反三。希望大家能各抒己见,不足之处请大家指正。
原创文章,转载请注明出处 /article/10852201.html
欢迎大家关注交流,共同学习共同进步。
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; }
这样来看是不是简介明了了很多呢。好了,学习不在于生搬硬套,而是在于举一反三。希望大家能各抒己见,不足之处请大家指正。
原创文章,转载请注明出处 /article/10852201.html
欢迎大家关注交流,共同学习共同进步。
相关文章推荐
- 如何定义自己的异常类
- 如何定义自己的EL表达式
- 如何自己定义RetargetAction
- C#学习使用try-catch-finally错误处理表达式(续)--定义自己的异常消息类
- CTreeCtrl如何设置和获取自己定义的数据
- Java异常封装(自己定义错误码和描述,附源码)
- 如何定义自己的ViewGroup
- 如何定义自己的控件
- Java异常封装(自己定义错误码和描述,附源码)
- rcp(插件开发) 如何查找自己定义的扩展点
- 在xml中如何引用自己定义的schema文件?
- 如何定义你自己的JavaScript类
- Jfianl aop 和 利用aop 自己定义一个Service异常
- 【java笔记】Java中定义自己的异常类
- solr中如何定义自己的解析器插件(QParserPlugin)
- 如何在博客园上面显示自己定义的头像--【sky原创】
- Java异常封装(自己定义错误码和描述,附源码)
- 在java里面怎么定义异常类用于自己编写的类的异常处理?
- 软件工程师必知之事 —— 如何定义自己的职业路线?
- Android中如何自己定义吐司(Toast)