您的位置:首页 > 编程语言 > C语言/C++

C++模板数组类

2007-11-04 09:02 218 查看
//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
=NULL;
}
}

Type& operator [](int n){
if(n<size&&n>=0){
slopOver=false;
return ptr
;
}
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: