在 C++ 中实现自定义异常类

server/2024/9/23 6:19:31/

在 C++ 中实现自定义异常类

作为一名 C++ 程序员,你可能会遇到需要自定义异常类的情况。自定义异常类可以让你更好地控制异常处理,并且可以使你的代码更加易读和易维护。在这篇博文中,我们将学习如何在 C++ 中实现自定义异常类。

为什么要自定义异常类?

在 C++ 中,标准库已经提供了一些内置的异常类,例如 std::exceptionstd::runtime_errorstd::logic_error。然而,这些内置的异常类可能不能满足你的需求。例如,你可能想要在异常类中包含更多的信息,或者你可能想要使用自定义的异常类来更好地控制异常处理。在这些情况下,你可以创建自定义的异常类。

创建自定义异常类

创建自定义异常类的过程很简单。首先,你需要创建一个新的类,继承自 std::exception 或其他内置的异常类。然后,你可以在新的类中添加自定义的数据成员和成员函数,以实现你的需求。

以下是一个简单的自定义异常类的示例代码:

#include <stdexcept>
#include <string>class MyException : public std::runtime_error
{
public:MyException(const std::string& message): std::runtime_error(message) {}int getErrorCode() const{return errorCode;}void setErrorCode(int code){errorCode = code;}private:int errorCode;
};

在这个示例代码中,我们创建了一个名为 MyException 的新类,继承自 std::runtime_error。我们还添加了一个名为 getErrorCode 的成员函数,用于获取错误代码,以及一个名为 setErrorCode 的成员函数,用于设置错误代码。

使用自定义异常类

使用自定义异常类的过程也很简单。首先,你需要在代码中抛出自定义的异常类。然后,你可以在 catch 块中捕获并处理自定义的异常类。

以下是一个简单的使用自定义异常类的示例代码:

#include <iostream>
#include "MyException.h"int main()
{try{throw MyException("My error message");}catch (const MyException& e){std::cout << "Error message: " << e.what() << std::endl;std::cout << "Error code: " << e.getErrorCode() << std::endl;}return 0;
}

在这个示例代码中,我们在 main 函数中抛出了一个名为 MyException 的自定义异常类。然后,我们在 catch 块中捕获并处理了这个自定义的异常类。在 catch 块中,我们使用 what 函数获取异常消息,并使用 getErrorCode 函数获取错误代码。

最后,你可以在自定义的异常类中添加任意数量的数据成员和成员函数,以实现你的需求。例如,你可以添加一个名为 getAdditionalInfo 的成员函数,用于获取额外的信息,或者你可以添加一个名为 setAdditionalInfo 的成员函数,用于 设置额外的信息。

以下是一个更加复杂的自定义异常类的示例代码:

#include <stdexcept>
#include <string>
#include <vector>class MyException : public std::runtime_error
{
public:MyException(const std::string& message): std::runtime_error(message) {}MyException(const std::string& message, int errorCode): std::runtime_error(message), errorCode(errorCode) {}MyException(const std::string& message, const std::vector<std::string>& additionalInfo): std::runtime_error(message), additionalInfo(additionalInfo) {}int getErrorCode() const{return errorCode;}void setErrorCode(int code){errorCode = code;}const std::vector<std::string>& getAdditionalInfo() const{return additionalInfo;}void setAdditionalInfo(const std::vector<std::string>& info){additionalInfo = info;}private:int errorCode;std::vector<std::string> additionalInfo;
};

在这个示例代码中,我们添加了一个名为 additionalInfo 的新数据成员,以及一个名为 getAdditionalInfo 的新成员函数,用于获取额外的信息,以及一个名为 setAdditionalInfo 的新成员函数,用于设置额外的信息。

使用这个更加复杂的自定义异常类,你可以在 catch 块中获取更多的信息,从而更好地控制异常处理。例如,你可以在 catch 块中使用 getAdditionalInfo 函数获取额外的信息,并在处理异常时使用这些信息。

最后,请记住,在使用自定义异常类时,请务必使用正确的构造函数,以确保异常类包含正确的信息。如果你仍然遇到问题,请告诉我,我会尽力帮助你。

总结

在这篇博文中,我们学习了如何在 C++ 中实现自定义异常类。我们首先学习了为什么要自定义异常类,然后学习了如何创建和使用自定义的异常类。最后,我们提供了一个更加复杂的自定义异常类的示例代码,以实现更多的需求。希望这篇博文能够帮助你更好地控制异常处理,并且使你的代码更加易读和易维护。


http://www.ppmy.cn/server/103379.html

相关文章

使用 `<springProperty>` 在 Logback 配置中引用 Spring 应用程序属性

在 Spring Boot 应用程序中&#xff0c;日志配置通常是一个至关重要的任务。使用 Logback 作为日志框架时&#xff0c;能够动态地引用 Spring 应用程序中的属性值是非常有用的。这不仅使日志配置更加灵活&#xff0c;还能确保日志格式与应用程序配置保持一致。本文将介绍 Logba…

使用亮数据爬虫工具解锁复杂爬虫场景

在当今数据驱动型时代&#xff0c;数据采集和分析能力算是个人和企业的核心竞争力。然而&#xff0c;手动采集数据耗时费力且效率低下&#xff0c;而且容易被网站封禁。 我之前使用过一个爬虫工具&#xff0c;亮数据&#xff08;Bright Data&#xff09; &#xff0c;是一款低…

生产环境中MapReduce的最佳实践

目录 MapReduce跑的慢的原因 MapReduce常用调优参数 1. MapTask相关参数 2. ReduceTask相关参数 3. 总体调优参数 4. 其他重要参数 调优策略 MapReduce数据倾斜问题 1. 数据预处理 2. 自定义Partitioner 3. 调整Reduce任务数 4. 小文件问题处理 5. 二次排序 6. 使用…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps&#xff08;开发者安全运营&#xff09;是指将安全最佳实践融入软件开发生命周期的过程&#xff0c;从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局&#xff1a;DevSecOps市场竞争激烈。该领域有数百家供应商提供工具&#xff0c;帮助组织…

蓝队技能-应急响应篇C2后门权限维持手法WindowsLinux基线检查排查封锁清理

知识点 1、应急响应-C2后门-排查&封锁 2、应急响应-权限维持-排查&清理 3、应急响应-基线检测-整改&排查演示案例-蓝队技能-C2后门&权限维持-基线检查&查杀封锁-Windows 1、常规C2后门-分析检测 无隐匿手法 也可以把怀疑的exe程序上传到沙箱上分析 有…

层次分析法

&#x1f308;个人主页&#xff1a;内容管理-CSDN创作中心 &#x1f4ab;个人格言:“成为自己未来的主人~” 层次分析法介绍 层次分析法是数学建模当中最基础的模型之一&#xff0c;其主要用于解决评价类问题&#xff08;....更好&#xff0c;....更优秀&#xff09; 简…

Spring之@Bean注解

1. 使用方式 1.1 Configuration Bean 1.1.1 创建实体类 User Data NoArgsConstructor public class User {private String name;public User(String name) {this.name name;} } 1.1.2 创建配置类 UserConfig Configuration public class UserConfig {Beanpublic User us…

给SystemUI 状态栏设置图标黑名单

方法一、Android 系统UI&#xff1a;状态栏屏蔽特定图标不显示 在Android设备上&#xff0c;状态栏是用户界面的重要组成部分。它包含了各种系统图标&#xff0c;如电池、信号强度、时间等。有时候&#xff0c;我们可能希望屏蔽某个特定的图标&#xff0c;使其在状态栏中不显示…