//outhor:ouskylin
//data:11/04/2007
//
///~:-----Begin
template<class Type,int Size>
class Array{
private:
Type * ptr;
int size;
Type oldValue; //保存一个越界访问发生时的老值
bool slopOver; //越界访问发生时的标记
int overIndex; //存放当越界访问时候的下越界标值
public:
Array():size(Size>0?Size:1),oldValue(NULL),slopOver(false),overIndex(NULL){
//为什么我把这个动态分配放在初始化列表中会出现内存耗尽?/
//唯一的可解释是初始化顺序的原因吗?在还没初始化size时候是一个非常大的随机值?
//但是我试验了,不是初始化顺序的原因,那又会是什么呢?本杰恩先生,请告诉我!
ptr=new Type[size];
for(int n=0;n<size;++n){
ptr[n]=NULL;
}
}
Type& operator [](int n){
if(n<size&&n>=0){
slopOver=false;
return ptr[n];
}
else if(n>=size){
oldValue=ptr[size-1];
overIndex=n;
slopOver=true;
return ptr[size-1];
}
else {
oldValue=ptr[0];
overIndex=n;
slopOver=true;
return ptr[0];
}
}
//是否发生越界访问
bool isSlopOver()const{
return slopOver;
}
//如果关心越界访问的发生,获得那个已经保存的老值
Type getOldValue()const{
return oleValue;
}
//返回一个 当越界发生时候的错误下标
int getOverIndex(){
return overIndex;
}
virtual ~Array(){
if(size>1)
delete [] ptr;
else
delete ptr;
}
};
///~:----end