C++模板数组类

//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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值