推荐答案
在C++中,自定义异常类通常是通过继承标准库中的std::exception
类来实现的。以下是一个简单的自定义异常类的示例:
-- -------------------- ---- ------- -------- ----------- -------- -------- ----- ----------- - ------ -------------- - -------- ----------- -------- ------- ----------------- ------------ ---- - ------------ -- ------- ----- ----- ------ ----- -------- -------- - ------ ---------------- - --
使用示例
-- -------------------- ---- ------- -------- ---------- ---- --------------- - ----- ---------------------- ---- --------- - --- ------ - --- - ---------------- - ----- ------ ------------ -- - --------- -- ------- ---------- - -- -------- -- ---------- - ------ -- -
本题详细解读
1. 继承 std::exception
在C++中,标准库提供了std::exception
类作为所有标准异常的基类。自定义异常类通常继承自std::exception
,以便能够与现有的异常处理机制兼容。
class MyException : public std::exception { // ... };
2. 重写 what()
方法
std::exception
类提供了一个虚函数what()
,用于返回异常的描述信息。自定义异常类通常需要重写这个函数,以返回自定义的错误信息。
virtual const char* what() const noexcept override { return message.c_str(); }
3. 异常类的构造函数
自定义异常类通常需要一个构造函数来接收错误信息,并将其存储在类的成员变量中。
MyException(const std::string& msg) : message(msg) {}
4. 抛出和捕获自定义异常
自定义异常类可以像标准异常一样被抛出和捕获。抛出时使用throw
关键字,捕获时使用try-catch
块。
-- -------------------- ---- ------- ---- --------------- - ----- ---------------------- ---- --------- - --- ------ - --- - ---------------- - ----- ------ ------------ -- - --------- -- ------- ---------- - -- -------- -- ---------- - ------ -- -
5. noexcept
关键字
what()
方法通常被标记为noexcept
,表示该方法不会抛出异常。这是为了确保在异常处理过程中不会引发新的异常。
virtual const char* what() const noexcept override { return message.c_str(); }
通过以上步骤,你可以轻松地在C++中创建和使用自定义异常类。