/************************************************************************
*功能:1 数组元素个数可以在初始化该对象的时候指定
* 2:可以动态玩数组中添加元素
* 3:使用该类时,不用操心动态内存分配、释放问题
* 4:能够像使用数组那样来使用动态数组类对象,如可以通过下标来访问元素。
****************************************************************************/
#include <iostream>
#include <cstring>
using namespace std;
class CArray
{
private:
int size;
int *ptr;
public:
CArray(int s=0);
CArray(const CArray &);
void push_back(int v);
CArray & operator=(const CArray &);
int length();
int &operator[](int i)
{
return ptr[i];
}
~CArray();
};
int CArray::length()
{
return size;
}
//CArray::CArray(int s=0):size(s)
CArray::CArray(int s):size(s)
{
if(s==0)
ptr=NULL;
else
ptr=new int[s];
}
CArray::CArray(const CArray & s)//注意参数设置为const,防止意外更改
{
if(s.size==0)
{
size=0;
ptr=NULL;
return;
}
ptr=new int[s.size];
memcpy(ptr,s.ptr,sizeof(int)*s.size);
size=s.size;
}
void CArray::push_back(int v)
{
if(ptr)
{
int * tempPtr=new int[size+1];
memcpy(tempPtr,ptr,size*sizeof(int));
delete [] ptr;
ptr=tempPtr;
}
else
ptr=new int[1];
ptr[size++]=v;
}
CArray & CArray::operator=(const CArray & s)//注意参数使用const。
{
if(s.ptr==ptr)
return *this;
if(ptr)//一定要注意防止delete空指针
delete []ptr;
if(s.ptr)
{
ptr=new int[s.size];
memcpy(ptr,s.ptr,s.size*sizeof(int));
size=s.size;
}
else
{
ptr=NULL;
size=0;
}
return *this;
}
CArray::~CArray()
{
if(ptr)
delete [] ptr;
}
int main()
{
CArray a;
for(int i=0;i<5;i++)
a.push_back(i);
//a[0]=11111;
// for(int i=0;i<a.length();i++)
// cout<<a[i]<<" ";
// cout<<"aaaa
";
CArray a2,a3;
a2=a;
for(int i=0;i<a.length();i++)
cout<<a2[i]<<" ";
a2=a3;
for(int i=0;i<a2.length();i++)
cout<<a2[i]<<" ";
cout<<endl;
a[3]=100;
CArray a4(a);
for(int i=0;i<a4.length();i++)
{
cout<<a4[i]<<" ";
}
return 0;
}