异常在继承中的使用
Get_Err.cpp
#include <iostream>
using namespace std;
class Array
{
protected:
int *m_data;
int m_len;
public:
Array(int l);
~Array();
class eSize
{
protected:
const char *ErrMsg;
public:
eSize(char *msg) : ErrMsg(msg)
{
}
virtual void printErr() = 0;
};
class eNegative : public eSize
{
public:
eNegative():eSize("eNegative Exception")
{
}
void printErr()
{
cout << ErrMsg << endl;
}
};
class eZero : public eSize
{
public:
eZero():eSize("eZero Exception")
{
}
void printErr()
{
cout << ErrMsg << endl;
}
};
class eTooSmall : public eSize
{
public:
eTooSmall():eSize("eTooSmall Exception")
{
}
void printErr()
{
cout << ErrMsg << endl;
}
};
class eTooBig : public eSize
{
public:
eTooBig(): eSize("eTooBig Exception")
{
}
void printErr()
{
cout << ErrMsg << endl;
}
};
int GetLength()
{
return m_len;
}
int &operator [](int index)
{
return m_data[index];
}
};
Array::Array(int l)
{
m_len = l;
if(m_len < 0)
{
throw eNegative();
}
else if(m_len == 0)
{
throw eZero();
}
else if(m_len <= 10)
{
throw eTooSmall();
}
else if(m_len >1000)
{
throw eTooBig();
}
m_data = new int[m_len + 1];
}
Array::~Array()
{
delete m_data;
}
int main()
{
try
{
Array a(0);
for(int i=0;i<a.GetLength();i++)
{
a[i] = i;
}
}
catch(Array::eNegative &e)
{
e.printErr();
}
catch(Array::eZero &e)
{
e.printErr();
}
catch(Array::eTooSmall &e)
{
e.printErr();
}
catch(Array::eTooBig &e)
{
e.printErr();
}
return 0;
}