13 C++ 异常处理机制之异常类的定义与使用

在前一篇中,我们了解了 STL 的迭代器的自定义。在掌握了自定义迭代器的基本知识后,我们将目光转向 C++ 中的异常处理机制。

异常处理是确保程序能够优雅地处理错误和意外情况的重要工具。在 C++ 中,异常处理机制使得程序员可以通过抛出和捕获异常来管理错误。我们的任务是定义异常类,并通过实例来展示它们的使用。

异常类的定义

在 C++ 中,可以通过定义一个类来创建自定义异常。通常来说,自定义异常类应该继承自 std::exception 类,这是 C++ 标准库提供的所有异常的基本类。通过继承,我们可以获得异常类所需的基础功能,同时也可以添加更多的自定义信息。

定义一个简单的异常类

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <exception>
#include <string>

class MyException : public std::exception {
private:
std::string message;
public:
MyException(const std::string& msg) : message(msg) {}

// 重写 what() 方法
virtual const char* what() const throw() {
return message.c_str();
}
};

在上述代码中,我们创建了一个命名为 MyException 的类,它包含一个字符串成员 message 用于存储异常消息,并重写了 what() 方法以返回这条消息。

使用自定义异常类

接下来,我们将展示如何在函数中使用我们的自定义异常类。考虑一个简单的情况,我们希望在发生错误时抛出 MyException

1
2
3
4
5
6
void riskyFunction(bool triggerError) {
if (triggerError) {
throw MyException("Something went wrong in riskyFunction!");
}
std::cout << "Function executed successfully." << std::endl;
}

在这个 riskyFunction 函数中,如果 triggerErrortrue,我们将抛出一个 MyException

捕获自定义异常

现在,让我们编写一个主程序来调用这个函数,并捕获可能出现的异常。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main() {
try {
riskyFunction(true); // 这将触发异常
} catch (const MyException& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
}

try {
riskyFunction(false); // 这将正常执行
} catch (const MyException& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
}

return 0;
}

代码解释

main 函数中,我们分两次调用 riskyFunction

  1. 第一次调用时,我们传递 true,这将导致抛出 MyException。异常会被 catch 语句捕获,并输出异常消息。
  2. 第二次调用时传递 false,这将正常执行,我们没有捕获异常的必要。

在这里,what() 方法返回的字符串给我们提供了详细的异常信息。

总结

到此为止,我们定义了一个自定义异常类并演示了如何在代码中使用它。我们通过抛出和捕获异常,确保程序在错误发生时能够适当地处理。

在下一篇中,我们将进一步讨论如何创建更多复杂的自定义异常,并探讨在现代 C++ 中处理异常的最佳实践。通过不断深入这个主题,我们可以更好地编写健壮、可维护的代码。

13 C++ 异常处理机制之异常类的定义与使用

https://zglg.work/c-plusplus-one/13/

作者

IT教程网(郭震)

发布于

2024-08-10

更新于

2024-08-22

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论