📜  使用C++中的类进行异常处理(1)

📅  最后修改于: 2023-12-03 15:36:35.439000             🧑  作者: Mango

使用C++中的类进行异常处理

C++中的异常处理机制可以让程序在遇到异常时,能够给出一些指示性的信息,方便程序员对程序进行调试。在C++中,可以通过使用异常类来创建自己的异常对象,并通过抛出异常来触发异常处理机制。

创建异常类

要使用C++中的异常类,首先需要创建自己的异常类。一个简单的异常类定义如下:

class Exc {
public:
    Exc(const std::string& message) : m_message(message) { }
    std::string message() const { return m_message; }
private:
    std::string m_message;
};

这个异常类包含一个构造函数,用于传递异常消息,并提供了一个message方法,用于获取异常消息。

抛出异常

要抛出异常,可以使用C++中的throw语句。以下是一个例子:

void foo() {
    throw Exc("Exception occurred in function foo().");
}

int main() {
    try {
        foo();
    }
    catch (Exc& e) {
        std::cout << e.message() << std::endl;
    }
    return 0;
}

在这个例子中,函数foo()抛出一个Exc类的异常,main()函数使用try-catch语句块来捕获并处理这个异常。 例如上面我们定义的异常类,当程序执行到throw Exc("Exception occurred in function foo().");时,程序会跳到 main函数的 catch 语句块中,然后调用 e.message() 方法来获取异常信息。

处理异常

在C++中,使用try-catch语句块来捕获并处理异常。以下是一个示例:

void foo() {
    throw Exc("Exception occurred in function foo().");
}

int main() {
    try {
        foo();
    }
    catch (Exc& e) {
        std::cout << e.message() << std::endl;
    }
    return 0;
}

在这个例子中,函数foo()抛出一个Exc类的异常,main()函数使用try-catch语句块来捕获并处理这个异常。当异常抛出时,程序会跳到catch语句块中,并调用e.message()方法来获取异常信息。

抛出标准异常

C++标准库中定义了一些异常类,可以在程序中使用。这里列出了一些常见的标准异常类:

  • std::runtime_error: 表示运行时错误
  • std::logic_error: 表示逻辑错误
  • std::bad_alloc: 表示内存分配失败
  • std::out_of_range: 表示下标越界

以下是一个示例:

#include <stdexcept>

void foo() {
    throw std::runtime_error("Exception occurred in function foo().");
}

int main() {
    try {
        foo();
    }
    catch (std::exception& e) {
        std::cout << e.what() << std::endl;
    }
    return 0;
}

在这个例子中,函数foo()抛出一个std::runtime_error异常,main()函数使用try-catch语句块来捕获并处理这个异常。当异常抛出时,程序会跳到catch语句块中,并调用e.what()方法来获取异常信息。

总结

C++中的异常处理机制可以让程序在遇到异常时,能够给出一些指示性的信息。要使用异常类,可以创建自己的异常类,并通过抛出异常来触发异常处理机制。要捕获并处理异常,可以使用try-catch语句块。C++标准库中定义了一些异常类,可以在程序中使用。