异常的类数

How much classes for exceptions

本文关键字:异常      更新时间:2023-10-16

创建&用c++处理异常?

class CannotRead : public runtime_exception { ... }
class CannotParse : public runtime_exception { ... }
...
throw CannotRead();
...

...
throw runtime_error("cannot read");
...

用C++做这件事的惯用方法是什么?

链接到比较这两种方法的文章将不胜感激。

感谢

没有现成的建议,但我个人的经验法则是:

  • 抛出std::runtime_error(或其兄弟之一,视情况而定)
  • 直到您发现需要在catch-时间区分各种异常,然后开始深化继承继承

通常,正如其他人在评论中提到的那样,您从std::runtime_error派生并重载what()虚拟方法。作为读者的练习,还可以编写一个构造函数来捕获异常消息。该网站提供了以下代码(尽管我对其进行了轻微修改以反映std::runtime_error的更改)。

#include <iostream>
#include <exception>
class MyException : public std::runtime_error
{       
    const char * what () const throw () { 
        return "C++ Exception";
    }
};
int main()
{
    try {
        throw MyException();
    } catch(MyException& e) {
        std::cout << "MyException caught" << std::endl;
        std::cout << e.what() << std::endl;
    } catch(std::exception& e) {
    }
    return 0;
}