#include<iostream>
using namespace std;
class MyArray
{
private:
int m_len;
int *m_data;
public:
int &operator [](int index)
{
return m_data[index];
}
int GetLength()
{
return m_len;
}
MyArray(int len);
~MyArray()
{
delete []m_data;
}
class eSize
{
protected:
const char *Msg;
public:
eSize(char *M):Msg(M){}
virtual void printErr()=0;
};
class eNegative:public eSize
{
public:
eNegative():eSize("eNegative"){}
void printErr()
{
cout<<Msg<<endl;
}
};
class eZero:public eSize
{
public:
eZero():eSize("eZero"){}
void printErr()
{
cout<<Msg<<endl;
}
};
class eTooSmall:public eSize
{
public:
eTooSmall():eSize("eTooSmall"){}
void printErr()
{
cout<<Msg<<endl;
}
};
class eTooBig:public eSize
{
public:
eTooBig():eSize("eTOOBig"){}
void printErr()
{
cout<<Msg<<endl;
}
};
};
MyArray::MyArray(int len)
{
m_len=len;
m_data=new int[m_len];
if(m_len<0)
{
throw eNegative();
}
else if(m_len==0)
{
throw eZero();
}
else if(m_len>0&&m_len<10)
{
throw eTooSmall();
}
else if(m_len>1000)
{
throw eTooBig();
}
}
int main()
{
try
{
MyArray a(0);
for(int i=0;i<a.GetLength();i++)
{
a[i]=i;
}
}
catch(MyArray::eNegative &e)
{
e.printErr();
}
catch(MyArray::eZero &e)
{
e.printErr();
}
catch(MyArray::eTooSmall &e)
{
e.printErr();
}
catch(MyArray::eTooBig &e)
{
e.printErr();
}
//cout<<"hello"<<endl;
return 0;
}