自己设计C++完善的异常处理类

作者:小菜 更新时间:2025-02-25 点击数:
简介:我们的异常处理类的features 如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。

一个相对完善的异

【菜科解读】

我们的异常处理类的features

如何写一个异常处理类是一个不太容易的事情,最近刚好接触了一些不错的代码,看到了一些技巧,这里和大家分享一下。

一个相对完善的异常处理类(以及附加的一些东西)应该能够处理下面的一些功能:

1) 能够方便的定义异常类的继承树

2) 能够方便的throw、catch,也就是在代码中捕获、处理代码的部分应该更短

3) 能够获取异常出现的源文件的名字、方法的名字、行号

4) 能够获取异常出现的调用栈并且打印出来

由于目前我用的平台是linux,所以里面调用的一些函数也只是在linux下面有用。

Windows也肯定是具有相应的函数的,具体可能需要去查查

首先科普一些内容:

1) 对于没有捕获的异常(no handler),则会终止程序,调用terminate()

2) 在定义函数的时候,我们可以在定义的后面加上throw (exception1, exception2…):

a) 如果没有写这一段、则可能抛出任意的异常

b) 如果写throw(),则表示函数不能抛出任意的异常

c) 如果写throw(A, B), 表示函数抛出A、B的异常

如果抛出的异常不在列表范围内,则异常不能被catch,也就会调用terminate()

我们构想一下我们定义、调用我们的异常类的时候是怎样的一个情形:

1) 定义:

1:class DerivedException : public BaseException

2: {

3:public:

4: MY_DEFINE_EXCEPTION(DerivedException, BaseException);

5: };

2) 如何抛出异常

1: MY_THROW(DerivedException)

3) 如何catch异常

1:catch (DerivedException& e)

2: {

3: cout

5:#include

6:

7:#define MY_THROW(ExClass, args...) \

8:do \

9: { \

10: ExClass e(args); \

11: e.Init(__FILE__, __PRETTY_FUNCTION__, __LINE__); \

12:throw e; \

13: } \

14:while (false)

15:

16:#define MY_DEFINE_EXCEPTION(ExClass, Base) \

17: ExClass(const std::string& msg = "") throw() \

18: : Base(msg) \

19: {} \

20: \

21: ~ExClass() throw() {} \

22: \

23:/* override */ std::string GetClassName() const \

24: { \

25:return #ExClass; \

26: }

27:

28:class ExceptionBase : public std::exception

29: {

30:public:

31: ExceptionBase(const std::string& msg = "") throw();

32:

33:virtual ~ExceptionBase() throw();

34:

35:void Init(constchar* file, constchar* func, int line);

36:

37:virtual std::string GetClassName() const;

38:

39:virtual std::string GetMessage() const;

40:

41:constchar* what() constthrow();

42:

43:const std::string& ToString() const;

44:

45: std::string GetStackTrace() const;

46:

47:protected:

48: std::string mMsg;

49:constchar* mFile;

50:constchar* mFunc;

51:int mLine;

52:

53:private:

54:enum { MAX_STACK_TRACE_SIZE = 50 };

55:void* mStackTrace[MAX_STACK_TRACE_SIZE];

56: size_t mStackTraceSize;

57:mutable std::string mWhat;

58: };

59:

60:class ExceptionDerived : public ExceptionBase

61: {

62:public:

63: MY_DEFINE_EXCEPTION(ExceptionDerived, ExceptionBase);

64: };

65:

66:#endif

这个头文件首先定义了两个宏,这里先暂时不管他,我先来解释一下ExceptionBase,它继承自std::exception,std::exception里面其实已经提供了一些功能了,但是比较弱,为了实现我们上文提到的功能,这里只是继承了std:exception的借口,也就是what()函数。

上面的接口应该比较好理解,45行的GetStackTrace是打印当前的调用栈,49-51行分别存储了当前出现exception的源文件名,函数名,行号,54行定义了最大的调用栈显示的深度,也就是显示50行。

60行显示了怎样定义一个新的异常类,这个就很方便了,通过MY_DEFINE_EXCEPTION宏去定义了一个继承类,详情见16行,这里不再细说,我这里想说说7行的MY_THROW宏,使用了3个内置的参数,__FILE__, __LINE__, __PRETTY_FUNCTION__, 他们分别是当前的文件名,行号,和函数名,他们的使用方法是在哪儿出现,其相应的值就是什么。

为什么这里要使用MY_THROW宏呢?其实是为了方便的把行号、文件名等加入进来,宏展开的时候是在一行上的,这样也使得行号与出错的行号保持一致,而且让代码更简单。

给出异常类的.cpp文件:

1:#include

2:#include

3:#include

4:

5:#include

6:#include

7:

8:#include"exception_test.h"

9:

10:usingnamespace std;

11:

12: ExceptionBase::ExceptionBase(const std::string& msg) throw()

13: : mMsg(msg),

14: mFile(""),

15: mFunc(""),

16: mLine(-1),

17: mStackTraceSize(0)

18: {}

19:

20: ExceptionBase::~ExceptionBase() throw()

21: {}

22:

23:void ExceptionBase::Init(constchar* file, constchar* func, int line)

24: {

25: mFile = file;

26: mFunc = func;

27: mLine = line;

28: mStackTraceSize = backtrace(mStackTrace, MAX_STACK_TRACE_SIZE);

29: }

30:

31: std::string ExceptionBase::GetClassName() const

32: {

33:return"ExceptionBase";

34: }

35:

36:constchar* ExceptionBase::what() constthrow()

37: {

38:return ToString().c_str();

39: }

40:

41:const std::string& ExceptionBase::ToString() const

42: {

43:if (mWhat.empty())

44: {

45: stringstream sstr("");

46:if (mLine > 0)

47: {

48: sstr \n";

71:char** strings = backtrace_symbols(mStackTrace, 10);

72:if (strings == NULL) // Since this is for debug only thus

73:// non-critical, don't throw an exception.

74:return"\n";

75:

76: std::string result;

77:for (size_t i = 0; i 自己,设计,C++,完善,的,异常,处理,类,我们,的,

电脑自己动手安装Win7系统,简单易行!

想重装系统不会怎么办?菜科网一键重装系统轻松在线帮您搞定系统重装问题。

软件支持 在线重装、U盘制作、自定义重装 等多种模式。

简介:大家都知道,电脑是现代人工作和娱乐的必备工具,而Win7系统是许多人的首选。

然而,很多人对于如何自己动手安装Win7系统感到困惑。

今天,我将为大家详细介绍一种简单易行的安装方法,让你轻松拥有一个高效流畅的Win7系统。

假设小明是一位电脑菜鸟,他最近购买了一台全新的电脑,但却不知道如何安装Win7系统。

这就是我们今天要解决的问题。

下面,让我们一起来看看具体的工具和步骤吧!工具原料:品牌型号:小明的电脑是XXX品牌的,型号是XXX。

操作系统版本:Win7 Professional。

软件版本:Win7安装盘。

一、备份重要数据在安装系统之前,一定要备份好重要的数据。

因为安装系统过程中可能会格式化硬盘,导致数据丢失。

小明选择将重要数据备份到移动硬盘,以便以后恢复使用。

二、准备安装盘下载或购买一个Win7系统的安装盘,根据电脑的位数选择32位或64位版本。

小明在网上下载了Win7 Professional 64位版本的安装盘,并将其制作成了启动盘。

三、设置BIOS将制作好的启动盘插入电脑,重启电脑。

进入BIOS界面,将启动方式设置为从光驱启动。

这样,电脑才能从安装盘引导启动。

四、安装Win7系统重启电脑后,系统将自动从安装盘引导启动。

按照提示,选择语言、时区和键盘类型等设置,然后点击“安装”按钮。

接下来,按照页面指引逐步操作,耐心等待系统安装完成。

总结:通过备份数据、准备安装盘、设置BIOS和安装Win7系统这几个步骤,小明成功地自己动手安装了Win7系统。

通过本实践,我们可以看出,安装系统并不是一件复杂的事情,只要掌握正确的方法,就能轻松解决。

相信通过本文的介绍,大家也可以轻松安装自己的Win7系统,享受更好的用户体验。

标签: 注意:本站所刊载的文章均为学习交流之用,请勿用于商业用途。

对于商业使用,请联系各自版权所有者,否则法律问题自行承担。

Win7系统升级指南:全面解析升级步骤与要点 Win7系统损坏修复教程:详细步骤助你快速解决问题 电脑自己动手安装Win7系统,简单易行! 分类于: 回答于:2023-11-05 简介:大家都知道,电脑是现代人工作和娱乐的必备工具,而Win7系统是许多人的首选。

然而,很多人对于如何自己动手安装Win7系统感到困惑。

今天,我将为大家详细介绍一种简单易行的安装方法,让你轻松拥有一个高效流畅的Win7系统。

假设小明是一位电脑菜鸟,他最近购买了一台全新的电脑,但却不知道如何安装Win7系统。

这就是我们今天要解决的问题。

下面,让我们一起来看看具体的工具和步骤吧!工具原料:品牌型号:小明的电脑是XXX品牌的,型号是XXX。

操作系统版本:Win7 Professional。

软件版本:Win7安装盘。

一、备份重要数据在安装系统之前,一定要备份好重要的数据。

因为安装系统过程中可能会格式化硬盘,导致数据丢失。

小明选择将重要数据备份到移动硬盘,以便以后恢复使用。

二、准备安装盘下载或购买一个Win7系统的安装盘,根据电脑的位数选择32位或64位版本。

小明在网上下载了Win7 Professional 64位版本的安装盘,并将其制作成了启动盘。

三、设置BIOS将制作好的启动盘插入电脑,重启电脑。

进入BIOS界面,将启动方式设置为从光驱启动。

这样,电脑才能从安装盘引导启动。

四、安装Win7系统重启电脑后,系统将自动从安装盘引导启动。

按照提示,选择语言、时区和键盘类型等设置,然后点击“安装”按钮。

接下来,按照页面指引逐步操作,耐心等待系统安装完成。

总结:通过备份数据、准备安装盘、设置BIOS和安装Win7系统这几个步骤,小明成功地自己动手安装了Win7系统。

通过本实践,我们可以看出,安装系统并不是一件复杂的事情,只要掌握正确的方法,就能轻松解决。

相信通过本文的介绍,大家也可以轻松安装自己的Win7系统,享受更好的用户体验。

菜科网系统致力于解决 Windows 系统重装解决方案,提供高效、安全、免费的系统重装服务。

手机贴吧如何设置让别人看不见自己关注的吧,发的贴子

最近手机贴吧怎么设置让别人看不见自己关注的吧,发的贴子?_贴吧怎样设置不让看帖子却能关注?事件在热度非常高,为大家准备了完整关于手机贴吧怎么设置让别人看不见自己关注的吧,发的贴子?_贴吧怎样设置不让看帖子却能关注?事件的所有相关内容,如果大家想知道更多这方面的情况,请持续关注本站!手机贴吧怎么设置让别人看不见自己关注的吧,发的贴子?要在手机贴吧APP中设置隐藏帖子,使别人无法查看,您可以按照以下步骤操作:首先,打开贴吧APP。

进入主界面后,从屏幕左侧向右滑动,直到看到侧边菜单。

点击左下角的“设置”选项。

接下来,在设置页面中找到并点击“隐私设置”。

在这里,您可以调整与个人资料相关的隐私选项。

在“隐私设置”中,找到“公开我的帖子”这一项,并点击进入。

选择“完全隐藏”选项,这样您的帖子将不会被其他用户查看。

通过以上步骤,您可以轻松地在手机贴吧APP中设置隐藏帖子,确保个人隐私得到有效保护。

贴吧怎样设置不让看帖子却能关注?希望我的回答能帮到您,祝您生活愉快!以下是详细的步骤:1. 打开手机贴吧应用。

2. 点击页面底部的“我的”选项。

3. 在“我的”页面中,点击右上角的设置按钮。

4. 进入设置页面后,向下滚动至“隐私设置”部分。

5. 在“资料相关设置”中,选择“完全隐藏”。

通过以上步骤,您可以成功设置资料的隐私保护。

如果您还有其他问题,欢迎随时咨询。

上述就是关于手机贴吧怎么设置让别人看不见自己关注的吧,发的贴子?_贴吧怎样设置不让看帖子却能关注?的全部内容了,希望能够有所帮助。

更多相关攻略和资讯可以关注我们多特资讯频道,之后将为大家带来更多精彩内容。

更多全新内容敬请关注多特软件站(www.duote.com)!

加入收藏
               

自己设计C++完善的异常处理类

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录