64,685
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
template<class T>
class myArray
{
private:
int m_nTotalSize;
int m_nValidSize;
T *m_pData;
public:
myArray(int nSize=3)
{
m_pData=new T[nSize];
m_nTotalSize=nSize;
m_nValidSize=0;
}
void add(T value);
int getSize() const
{
return m_nValidSize;
}
int getTotalSize() const
{
return m_nTotalSize;
}
T getvalue(int pos) const
{
return m_pData[pos];
}
virtual ~myArray()
{
if(m_pData!=NULL)
{
delete [] m_pData;
m_pData=NULL;
}
}
void traverse() const;
};
template<class T>
void myArray<T>::traverse() const
{
cout<<m_pData<<endl;//测试1
for(int i=0;i<m_nValidSize;i++) std::cout<<m_pData[i]<<"\t";
}
template<class T>
void myArray<T>::add(T value)
{
if(m_nValidSize!=m_nTotalSize)
m_pData[m_nValidSize++]=value;
else
{
T *m_temp=new T[m_nTotalSize];
for (int i=0;i<m_nValidSize;i++)
m_temp[i]=m_pData[i];
cout<<m_pData<<endl; // 测试2
delete []m_pData;
m_nTotalSize*=2;
//T *m_pData=new T[m_nTotalSize]; //这里需要修改对象的m_pData,不是定义一个局部变量,否则无法修改类的m_pData
m_pData=new T[m_nTotalSize];
for(int i=0;i<m_nValidSize;i++)
m_pData[i]=m_temp[i];
delete []m_temp;
m_pData[m_nValidSize++]=value;
cout<<m_pData<<endl;//测试3
}
}
int main(void)
{
myArray<int> arr;
arr.add(4);
arr.add(6);
arr.add(7);
arr.add(5);
arr.traverse();
return 0;
}