C++异常类

异常类

在之前C++简单的异常处理例子中,我们抛出并捕获了一个int类型的值。但是我们一般采用异常类。因为异常类相比简单的数据类型可以存储更多信息。C++预定义了多个可创建异常对象的异常类,如下图所示。

C++异常类

在所有的异常类中,exception类是根,定义于头文件中。类中包含一个函数what(),用于返回异常对象的错误信息。

runtime_error类,定义于中。它是描述运行时错误的标准异常的基类。它的派生类overflow_error描述了算术运算溢出。即一个值太大,超出了C++表示的范围。派生类underflow_error与overflow_error刚好相反。它描述了算术运算向下溢出。即一个值太小,超出了C++的表示范围。

logic_error类,定义于头文件中,是描述逻辑错误的标准异常类的基类。类invaild_argument描述的是将非法的参数传递给函数的错误。类length_error是对象大小超过最大允许长度的错误。而类out_of_range描述的是值超出允许范围的错误。

类bad_alloc, bad_cast, bad_typeid, bad_exception描述了C++运算符抛出的异常。bad_alloc异常是new运算符在无法分配内存时抛出的。bad_cast是dynamic_cast运算符在转换引用类型发生错误时抛出的。bad_typeid异常时typeid运算符在运算对象为空指针时抛出的。bad_exception类则描述了从未预料的异常出来程序所抛出的异常。

下面给出抛出runtime_error异常的例子:

#include <iostream>
#include <stdexcept>

using namespace std;

int quotient(int a, int b) {
    if (b == 0) {
        throw runtime_error("整数不能除零!");
    }
    return a/b;
}
int main()
{
    cout << "输入两个数:" << endl;
    int a, b;
    cin >> a >> b;
    try{
        cout << a << "/" << b << "=" << quotient(a,b) << endl;
    } catch (runtime_error& e){
        cout << e.what() << endl;
    }

    return 0;
}

输入4和0

C++异常类

再给出一个处理bad_alloc异常的例子:

#include <iostream>

using namespace std;

int main()
{
    try{
        for(int i = 1; i <= 100; i++){
            new int[100000000];
            cout << i << "个数组被创建了!" << endl;
        }
    }catch(bad_alloc& e){
        cout << "发生异常:" << e.what() << endl;
    }
    return 0;
}

运行结果:

C++异常类

原文链接: https://www.cnblogs.com/bwjblogs/p/12817408.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/196801

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午7:22
下一篇 2023年2月12日 下午7:23

相关推荐