自定义异常类
在 C++ 中,除了标准库提供的异常类型,开发者还可以通过自定义异常类来更好地满足项目需求。自定义异常类通常继承自 std::exception 类,并重写 what() 方法返回异常的详细信息。通过自定义异常类,可以使得错误信息更加清晰,且更易于调试。
自定义异常类的基本结构
自定义异常类通常需要继承自 std::exception,并重写 what() 方法来提供自定义的异常信息。
示例代码
#include <iostream>
#include <exception>
class MyException : public std::exception {
public:
// 构造函数,接受错误信息
MyException(const char* msg) : message(msg) {}
// 重写 what() 方法,返回错误信息
const char* what() const noexcept override {
return message;
}
private:
const char* message;
};
void testFunction() {
throw MyException("This is a custom exception!");
}
int main() {
try {
testFunction(); // 调用可能抛出自定义异常的函数
} catch (const MyException& e) {
std::cerr << "Caught custom exception: " << e.what() << std::endl;
}
return 0;
}
`
在这个例子中,MyException 是一个自定义的异常类,它继承自 std::exception 并实现了 what() 方法来返回错误信息。在 main() 函数中,我们捕获并处理了 MyException 类型的异常。
自定义异常类的扩展
你可以根据需要在自定义异常类中添加更多的功能,比如存储错误码、错误类型,甚至是错误发生的时间等信息。
带有错误码的自定义异常
#include <iostream>
#include <exception>
class ErrorCodeException : public std::exception {
public:
ErrorCodeException(int code, const char* msg) : errorCode(code), message(msg) {}
const char* what() const noexcept override {
return message;
}
int getCode() const {
return errorCode;
}
private:
int errorCode;
const char* message;
};
void testFunction() {
throw ErrorCodeException(404, "Resource not found");
}
int main() {
try {
testFunction();
} catch (const ErrorCodeException& e) {
std::cerr << "Caught exception with code " << e.getCode() << ": " << e.what() << std::endl;
}
return 0;
}
在这个例子中,ErrorCodeException 类除了包含错误信息外,还包含一个错误码,提供了更多的异常信息。
总结
- 自定义异常类通常继承自
std::exception。 - 通过重写
what()方法提供详细的错误信息。 - 可以扩展异常类以支持更多的自定义功能,如错误码、时间戳等。
相关内容
- 算术运算符 本节将介绍 C++ 中的算术运算符,包括加法、减法、乘法、除法、取余等,帮助你理解如何进行基本的数学运算。
- 位运算符 本节将介绍 C++ 中的位运算符,帮助你理解如何操作整数的二进制位,并进行高效的数据处理。
- 类型转换 本节将介绍 C++ 中的类型转换,包括隐式转换、显式转换和强制类型转换等方式,帮助你理解如何处理不同类型的转换。
- 条件语句 本节将深入探讨 C++ 中的条件语句,包括 `if`、`else`、`else if` 以及 `switch` 语句。通过条件语句,程序可以根据不同的输入或状态...
- 分支跳转 本节将讲解 C++ 中的分支跳转语句,包括 `if`、`else`、`switch`、`break`、`continue` 和 `goto`,这些语句有助于控制...
- 逻辑与关系运算符 本节将介绍 C++ 中的逻辑运算符和关系运算符,帮助你理解如何处理布尔值以及进行条件判断。