• 类开发中异常的结构设置


    #include <iostream>
    using namespace std;
    
    class MyArray
    {
    public:
        MyArray(int len);
        ~MyArray();
    public:
        int & operator[](int index);
        int getLen();
    
        class eSize
        {
        public:
            eSize(int size)
            {
                m_size = size;
            }
            virtual void printErr()
            {
                cout << "size:" << m_size << " ";
            }
        protected:
            int m_size;
        };
        class eNegative : public eSize
        {
        public:
            eNegative(int size) : eSize(size)
            {
                ;
            }
            virtual void printErr()
            {
                cout << "eNegative 类型 size:" << m_size << " ";
            }
        };
        class eZero : public eSize
        {
        public:
            eZero(int size) : eSize(size)
            {
                ;
            }
            virtual void printErr()
            {
                cout << "eZero 类型 size:" << m_size << " ";
            }
        };
        class eTooBig : public eSize
        {
        public:
            eTooBig(int size) : eSize(size)
            {
                ;
            }
            virtual void printErr()
            {
                cout << "eTooBig 类型 size:" << m_size << " ";
            }
        };
        class eTooSmall : public eSize
        {
        public:
            eTooSmall(int size) : eSize(size)
            {
                ;
            }
            virtual void printErr()
            {
                cout << "eTooSmall 类型 size:" << m_size << " ";
            }
        };
    
    private:
        int *m_space;
        int m_len;
    };
    
    
    MyArray::MyArray(int len)
    {
        if (len  < 0)
        {
            throw eNegative(len);
        }
        else if (len == 0)
        {
            throw eZero(len);
        }
        else if (len > 1000)
        {
            throw eTooBig(len);
        }
        else if (len < 3)
        {
            throw eTooSmall(len);
        }
        m_len = len;
        m_space = new int[len];
    }
    
    MyArray::~MyArray()
    {
        if (m_space != NULL)
        {
            delete [] m_space;
            m_space = NULL;
            m_len = 0;
        }
    }
    
    int & MyArray::operator[](int index)
    {
        return m_space[index];
    }
    
    int MyArray::getLen()
    {
        return m_len;
    }
    
    void main()
    {
    
        try
        {
            MyArray a(-5);
            for (int i=0; i<a.getLen(); i++)
            {
                a[i] = i+1;
                printf("%d ", a[i]);
            }
        }
        catch(MyArray::eSize &e)
        {
            //cout <<  "len的大小: " << e.eSize();
            e.printErr();
        }
        catch (...)
        {
        }
    
    
        cout<<"hello..."<<endl;
        system("pause");
        return ;
    }
    
    // 不推荐
    void main51()
    {
        
        try
        {
            MyArray a(-5);
            for (int i=0; i<a.getLen(); i++)
            {
                a[i] = i+1;
                printf("%d ", a[i]);
            }
        }
        catch(MyArray::eNegative e)
        {
            cout << "eNegative 类型异常" << endl;
        }
        catch(MyArray::eZero e)
        {
            cout << "eZero 类型异常" << endl;
        }
        catch(MyArray::eTooBig e)
        {
            cout << "eTooBig 类型异常" << endl;
        }
        catch(MyArray::eTooSmall e)
        {
            cout << "eTooSmall 类型异常" << endl;
        }
        
        catch (...)
        {
        }
        
    
        cout<<"hello..."<<endl;
        system("pause");
        return ;
    }
  • 相关阅读:
    ASP.NET中的状态保持(转载)
    Win7系统下VS2008安装SP1补丁解决JQuery无智能提示的问题
    合并多个List<T>类型并通过LINQ按指定属性排序
    ASP.NET状态保持:ViewState
    第一部分 CLR基础:第1章 CLR的执行模型
    Oracle存储过程知识汇总
    ASP.NET中Button控件的CommandName和CommandArgument属性用法
    PL/SQL Developer使用
    ASP.NET常用代码汇总
    PL/SQL Developer中文注释乱码的解决办法
  • 原文地址:https://www.cnblogs.com/lyjbk/p/13202800.html
Copyright © 2020-2023  润新知