Jupyter AI

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

📅发表日期: 2024-08-10

🏷️分类: Cplus进阶

👁️阅读次数: 0

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

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

异常类的定义

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

定义一个简单的异常类

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

#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

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

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

捕获自定义异常

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

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++ 中处理异常的最佳实践。通过不断深入这个主题,我们可以更好地编写健壮、可维护的代码。

💬 评论

暂无评论