DynamicArray.cpp代码示例
#include <iostream>
using namespace std;
template <typename T>
class DynamicArray
{
private:
T* m_array;
int m_length;
public:
DynamicArray(int length = 0)
{
m_array = new T[length];
if(m_array != NULL)
{
m_length = length;
}
}
DynamicArray(const DynamicArray<T>& obj)
{
m_array = new T[obj.m_length];
if(m_array != NULL)
{
m_length = obj.m_length;
for(int i = 0; i < obj.m_length; i++)
{
m_array[i] = obj.m_array[i];
}
}
}
DynamicArray<T>& operator = (const DynamicArray<T>& obj)
{
if(this != &obj)
{
T* array = new T[obj.m_length];
if(array != NULL)
{
for(int i = 0; i < obj.m_length; i++)
{
array[i] = obj.m_array[i];
}
T* temp = m_array;
m_array = array;
m_length = obj.m_length;
delete [] temp;
}
}
return *this;
}
//动态设置数组的大小
void resize(int length)
{
if(m_length != length)
{
T* array = new T[length];
if(array != NULL)
{
int size = ((m_length < length ? m_length : length));
for(int i = 0; i < size; i++)
{
array[i] = m_array[i];
}
T* temp = m_array;
m_array = array;
m_length = length;
delete [] temp;
}
}
}
//重载数组访问操作符
T& operator [] (int i)
{
if((0 <= i) && (i < length()))
{
return m_array[i];
}
}
//用非const版本实现const版本选去除当前对象的const属性再调用非const版本
T operator [](int i) const
{
return (const_cast<T&>(*this))[i];
}
int length() const
{
return m_length;
}
~DynamicArray()
{
delete [] m_array;
}
};
int main()
{
DynamicArray< DynamicArray<int> > d;
d.resize(3);
for(int i=0; i<d.length(); i++)
{
d[i].resize(i + 1);
}
for(int i=0; i<d.length(); i++)
{
for(int j=0; j<d[i].length(); j++)
{
d[i][j] = i + j;
}
}
for(int i=0; i<d.length(); i++)
{
for(int j=0; j<d[i].length(); j++)
{
cout << d[i][j] << " ";
}
cout << endl;
}
return 0;
}
运行截图