• c++异常处理机制


      1.异常处理的实现

      

    #include<iostream>
    using namespace std;
    double divide(double,double);
    int main(){
        double f1=0.0,f2=0.0;
        try{
            cout<<"f1/f2="<<divide(f1,f2)<<endl;
        }
        catch(double){
            cout<<"被0除"<<endl;
        }
        return 0;
    }
    double divide(double x,double y){
        if(y==0)
            throw 0.0;
        return x/y;
    }

      运行结果:  被0整除

    #include<iostream>
    using namespace std;
    class OutOfBounds{
    public:
        OutOfBounds(int a){
            i=a;
        }
        int indexValue(){
            return i;
        }
    private:
        int i;
    };
    class Array{
    public:
        int &operator[](int i){
            if(i<0||i>=10){
                throw OutOfBounds(i);
                return a[i];
            }
        }
    private:
        int a[10];
    };
    int main(){
        Array a;
        try{
            a[3]=30;
            cout<<"a[3]  "<<a[3]<<endl;
            a[100]=100;
            cout<<"a[100]"<<a[100]<<endl;
        }
        catch(OutOfBounds error){
            cout<<"Subscript value "<<error.indexValue()<<" out of bounds.
    ";
        }
        return 0;
    }

    重载运算符号[],进行越界检查。如果下标为负或大于10,则出错。

    注意:重载运算符operator[]函数第一行的&符号是必需的。因为这个函数不仅返回数组元素的值,而且还返回这个元素本身(即左值),以便在一条赋值语句的左侧使用诸如a[3]的表达式,如表达式a[100]=1000;

      运行结果:

    2重新抛出异常和异常规范

    #include<iostream>
    using namespace std;
    void h(){
        throw 0;
    }
    void g(){
        try{
            h();
        }
        catch(int){
            cout<<"Catch in g
    ";
            throw;
        }
    }
    int main(){
        try{
            g();
        }
        catch(int){
            cout<<"Catch in main
    ";
        }
        
        return 0;
    }

    运行结果:

    3.标准库中的异常类

    #include<iostream>
    #include <exception>
    using namespace std;
    
    int main(){
        try{
            exception theError;//声明一个标准c++异常类exceptio的对象
            throw(theError);//抛出该异常类的对象
        }
        catch(const exception &theError){//捕捉标准c++异常类的对象
            cout<<theError.what()<<endl;//用waht成员函数显示出错原因
        }
        try{
            logic_error theLogicError("Logic Error!");//声明一个标准c++异常类logic_error的对象
            throw(theLogicError);//抛出该异常类的对象
        }
        catch(const exception &theLogicError){//捕捉标准c++异常类的对象
            cout<<theLogicError.what()<<endl;//用waht成员函数显示出错原因
        }
        return 0;
    }

    运行结果:

  • 相关阅读:
    创建ROS工程結構
    ubuntu下boot分区空间不足问题的解决方案
    Ubuntu下查看自己的GPU型号
    win+Ubuntu双系统安装和卸载、Ubuntu上OpenCV+ROS环境配置
    Opencv——摄像头设置
    error:Assertion failed ((unsigned)i0 < (unsigned)size.p[0]) in cv::Mat::at
    error: OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows) in cv::Mat::Mat
    常用的传感器和运动机构
    步进电机与伺服电机
    Opencv——级联分类器(AdaBoost)
  • 原文地址:https://www.cnblogs.com/liujunming/p/4578683.html
Copyright © 2020-2023  润新知