zoukankan      html  css  js  c++  java
  • C++异常类

    异常类

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

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

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

    logic_error类,定义于头文件<stdexcept>中,是描述逻辑错误的标准异常类的基类。类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

    再给出一个处理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;
    }

    运行结果:

  • 相关阅读:
    触摸屏网站开发系列(一)-ios web App应用程序(ios meta)
    jQuery Mobile 入门教程
    html的视频插件 (转)
    网页布局流式布局
    2.05-random-uesr-proxy
    2.04-proxy-handler
    2.03-handler_openner
    2.02-request_header_two
    2.01-request_header
    1.03-get_params2
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12817408.html
Copyright © 2011-2022 走看看