C++程序 处理异常方法
异常处理是处理运行时错误的一种方式,我们进行异常处理,以便即使在运行时出现错误,程序的正常流程也能被维护。异常是程序在执行中遇到的运行时异常或异常条件。
异常处理机制提供了一种从程序的一个部分传输控制到另一个部分的方法,这使得将错误处理代码与用于解决程序实际功能的代码分离变得容易。
C++为异常处理提供了以下专用关键字:
- try: 通常将可能引发异常的代码块放置在try块中,然后跟随一个或多个catch块。如果发生异常,则它会从try块中抛出。
- catch: 此块捕捉从try块中抛出的异常,在此catch块中编写处理异常的代码。
- throw: throw关键字用于抛出异常。也用于列出函数抛出但不自己处理的异常。
语法:
以下是用于演示如何在C++中处理异常的C++程序:
示例1: 以下是用于演示当除以零时会发生什么以及未处理异常的C++程序。
输出:
浮点异常(SIGFPE)
上述程序将显示异常行为,并且不会显示任何输出。代码中抛出异常,但未被捕获,因此可能显示浮点异常或不显示任何输出。
以下是用于处理除以零异常的C++程序:
输出
示例2: 以下是用于输入年龄整数的C++程序,如果年龄小于18则返回NO,但如果年龄大于等于18则返回Yes:
Output
C++ Standard Exceptions
C++定义了一组在<exception>
中定义的标准异常,可以在程序中使用这些异常。 这些异常按照父-子类层次结构排列。下表列出了具有描述的标准异常:
S.No. | Exception | Description |
---|---|---|
1. | std::exception | 所有标准C++异常的异常和父类。 |
2. | std::bad_alloc | new可以抛出此异常。 |
3. | std::bad_cast | dynamic_cast可以抛出此异常。 |
4. | std::bad_exception | 此异常是C++程序中处理意外异常的有用工具。 |
5. | std::bad_typeid | type id可以抛出此异常。 |
6. | std::logic_error | 可以通过读取代码检测到的异常。 |
7. | std::domain_error | 当使用数学上无效的域时抛出此异常。 |
8. | std::invalid_argument | 由于无效参数而抛出此异常。 |
9. | std::length_error | 创建了过大的std :: string时抛出此异常。 |
10. | std::out_of_range | 此异常可以由’at’方法抛出,例如std :: vector和std :: bitset<> :: operator []()。 |
11. | std::runtime_error | 理论上无法通过阅读代码检测到的异常 |
12. | std::overflow_error | 如果发生数学上溢出,则会引发此异常。 |
13. | std::range_error | 当您尝试存储超出范围的值时发生。 |
14. | std::underflow_error | 如果发生数学下溢,则会引发此异常。 |
C++中的新异常
可以通过继承和覆盖异常类功能来定义自定义异常。
语法:
using std :: exception
以下是定义新异常的C++程序:
输出结果: