案例:设计一个数组类 MyArray,重载[]操作,
数组初始化时,对数组的个数进行有效检查
index < 0 抛出异常eNegative
index = 0 抛出异常eZero
index > 1000 抛出异常eTooBig
index < 10 抛出异常eTooSmall
数组初始化时,对数组的个数进行有效检查
index < 0 抛出异常eNegative
index = 0 抛出异常eZero
index > 1000 抛出异常eTooBig
index < 10 抛出异常eTooSmall
eSize类是以上类的父类,实现由参数构造、并定义virtual void printErr()输出错误
#include <iostream>
using namespace std;
class MyArray
{
public:
MyArray(int len);
//在类的内部定义一个类,叫内部类
class eSize
{
public:
eSize(int size)
{
this->size = size;
}
virtual void printErr() = 0;
protected:
int size;
};
class eNegative:public eSize
{
public:
eNegative(int size):eSize(size)
{
;
}
virtual void printErr()
{
printf("数组长度不能小于 0, 当前长度为%d\n", size);
}
};
class eZero:public eSize
{
public:
eZero(int size):eSize(size)
{
;
}
virtual void printErr()
{
printf("数组长度不能等于 0, 当前长度为%d\n", size);
}
};
class eTooBig:public eSize
{
public:
eTooBig(int size):eSize(size)
{
;
}
virtual void printErr()
{
printf("数组长度不能大于 1000, 当前长度为%d\n", size);
}
};
class eTooSmall:public eSize
{
public:
eTooSmall(int size):eSize(size)
{
;
}
virtual void printErr()
{
printf("数组长度不能小于 10, 当前长度为%d\n", size);
}
};
};
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 < 10)
throw eTooSmall(len);
}
int main()
{
try
{
MyArray a(1001);
}
catch (MyArray::eSize &e)
{
e.printErr();//多态实现
}
return 0;
}