自己写的Array类

 

这是今天自己写的一个array类,可能还存在问题,希望大家指正!

由于vc6编译器不支持 定义跟实现分别编译,否则出现link2001的错误。

用的时候,#include"array.cpp"即可

// array.h
/********************************************************************
 自定义array类
1. 判断下标是否越界
2. 用==, != 来判断两个数组是否相等
3.一次输入/输出 整个数组
4.用=运算符把一个数组赋值个另一个数组
********************************************************************
*/


#ifndef ARRAY_H
#define  ARRAY_H
#include 
< iostream >
using   namespace  std;

template
< class  Type >
class  Array {
  friend ostream
& operator<<(ostream& outconst Array<Type>& a);
  friend istream
& operator>>(istream& input, Array<Type>& a);
private:
  Type 
*data; //array
  int size;   //length of array
public:
  Array(
int sz = 10);  //default constructor
  Array(const Type *x, int length);           //copy constructor
  Array(const Array<Type>& x);    //copy constructor
  ~Array();                       //destructor
  int getLength() const;                   //get length of this array

  Array
<Type>& operator=(const Array<Type>& a);   //copy: ar1 = ar2;
  
  Type
& operator[](int i);        //array[i] = n;
  const Type& operator[](int i) const;   //int n = array[i];

  
bool operator==(const Array<Type>& a);
  
bool operator!=(const Array<Type>& a);  
}
;
#endif

// array.cpp
#include  " array.h "
#include 
< cassert >
#include 
< iomanip >

template
< class  Type >
ostream
&   operator << (ostream &   out const  Array < Type >&  a) {
  
for(int i = 0; i < a.size; i++)
    
out << setw(4<< a.data[i];
  
return out;
}


template
< class  Type >
istream
&   operator >> (istream &  input, Array < Type >&  a) {
  
for(int i = 0; (i < a.size); i++){
    input 
>> a.data[i];
  }

  
return input;
}


template
< class  Type >
Array
< Type > ::Array( int  sz) {
  size 
= (sz > 0 ? sz : 10); //validate size
  data = new Type[size];
  assert(data);

  
//initialize array
  for(int i = 0; i < size; i++)
    data[i] 
= 0;
}


template
< class  Type >
Array
< Type > ::Array( const  Type  * x,  int  length) {
  size 
= length;
  data 
= new Type[length];
  assert(data);
  
for(int i = 0; i < size; i++)
    data[i] 
= x[i];
}


template
< class  Type >
Array
< Type > ::Array( const  Array < Type >&  x) {
  size 
= x.size;
  data 
= new Type[size]; //create space for arrya
  assert(data);
  
for(int i = 0; i < size; i++)//copy one by one
    data[i] = x.data[i];
}


template
< class  Type >
Array
< Type > :: ~ Array() {
  delete[] data;
}


template
< class  Type >
int  Array < Type > ::getLength()  const {
  
return size;
}


template
< class  Type >
Array
< Type >&  Array < Type > :: operator = ( const  Array < Type >&  a) {
  
if(*this != a){    //self-copy
    if(size != a.size)// different size
      delete[] data;
      size 
= a.size;
      data 
= new Type[size];
      assert(data);
    }

    
for(int i = 0; i < size; i++)
      data[i] 
= a.data[i];
  }

  
return *this;
}


template
< class  Type >
const  Type &  Array < Type > :: operator []( int  i)  const {
  assert(i
>=0 && i <size);
  
return data[i];
}


template
< class  Type >
Type
&  Array < Type > :: operator []( int  i) {
  assert(i
>=0 && i <size);
  
return data[i];
}


template
< class  Type >
bool  Array < Type > :: operator   == ( const  Array < Type >&  a) {
  
if(size != a.size) //judge size
    return false;
  
for(int i = 0; i < size; i++//judge element
    if(data[i] != a.data[i])
      
return false;
  
return true;
}


template
< class  Type >
bool  Array < Type > :: operator   != ( const  Array < Type >&  a) {
  
return !(*this == a);
}

你可能感兴趣的:(delete,编译器)