C++学习经历(八)异常处理机制,try、throw、catch

题目:设计一个数组类MyArray,重载【】操作,数组初始化时,对数组的个数进行检查;

情况:1.index < 0时,抛出异常类eNagetive();

          2.index = 0时,抛出异常类eZero();

          3.index > 1000时,抛出异常类eTooBig();

          4.index < 10 && index >0 时,抛出异常类eTooSmall();

#include <iostream>

using namespace std;

class MyArray
{
    int m_length;
    int *m_data;
    public:
        MyArray();
        MyArray(int length);
        int Getlength();
        ~MyArray();
        int &operator [](int index);

        class eSize
        {
            protected:
                const char *ErrMsg;
            public:
                eSize(const char *ptr):ErrMsg(ptr)
                {

                }   
                virtual const char *print() = 0;
        };
    
        class eNagetive : public eSize
        {
            public:
                eNagetive():eSize("eNagetive Exception")
                {

                }
                const char *print()
                {
                    return ErrMsg;
                }
        };
        class eZero : public eSize
        {
            public:
                eZero():eSize("eZero Exception")
                {
                
                }
                const char *print()
                {
                    return ErrMsg;
                }
        };
        class eTooBig: public eSize
        {
            public:
                eTooBig() : eSize("eTooBig Exception")
                {

                }
                const char *print()
                {
                    return ErrMsg;
                }
        };
        class eTooSmall : public eSize
        {
            public: 
                eTooSmall():eSize("eTooSmall Exception")
                {

                }
                const char *print()
                {
                    return ErrMsg;
                }
        };

};

MyArray::MyArray()
{
    m_data = NULL;
}

MyArray::MyArray(int length)
{
    m_length = length;
    m_data = new int[m_length];
    if(m_length < 0)
    {
        throw eNagetive();
    }
    else if(m_length == 0)
    {
        throw eZero();
    }
    else if(m_length > 1000)
    {
        throw eTooBig();
    }
    else if(m_length > 0 && m_length <= 10 )
    {
        throw eTooSmall();
    }
}

int MyArray::Getlength()
{
    return m_length;
}

MyArray::~MyArray()
{
    delete []m_data;
}

int &MyArray::operator [](int index)
{
    return m_data[index];
}


int main(int argc, char **argv)
{
    try
    {
        MyArray A(10000); 
        for(int i = 0;i < A.Getlength() ; i++)
        {
            A[i] = i;
        }
    }
    catch(MyArray::eNagetive &e)
    {
        cout << e.print() << endl;
    }
    catch(MyArray::eZero &e)
    {
        cout << e.print() << endl;
    }
    catch(MyArray::eTooSmall &e)
    {
        cout << e.print() << endl;
    }
    catch(MyArray::eTooBig &e)
    {
        cout << e.print() << endl;
    }

    return 0;
}


猜你喜欢

转载自blog.csdn.net/zhanganliu/article/details/80056782