类模板练习实现MyArray
#include<iostream>
using namespace std;
template<class T>
class MyArray
{
public:
MyArray(int capaCity);
MyArray(const MyArray<T>& arr);
~MyArray();
T& operator[](int index);
MyArray<T>& operator=(const MyArray<T>& arr);
void pushBack(T data);
public:
int m_capaCity;
int m_size;
T* p_addr;
};
template<class T>
MyArray<T>::MyArray(int capaCity)
{
m_capaCity = capaCity;
m_size = 0;
this->p_addr = new T[this->m_capaCity];
}
template<class T>
MyArray<T>::MyArray(const MyArray<T>& arr)
{
this->p_addr = new T[arr.m_capaCity];
for (int i = 0; i < arr.m_size; i++)
this->p_addr[i] = arr.p_addr[i];
this->m_size = arr.m_size;
this->m_capaCity = arr.m_capaCity;
}
template<class T>
MyArray<T>::~MyArray<T>()
{
if (this->p_addr != NULL)
delete[]this->p_addr;
}
template<class T>
T& MyArray<T>::operator[](int index)
{
if (index > this->m_capaCity)
return;
return this->p_addr[index];
}
template<class T>
MyArray<T>& MyArray<T>::operator=(const MyArray<T>& arr)
{
if (this->p_addr != NULL)
delete[]this->p_addr;
this->p_addr = new T[arr.m_capaCity];
for (int i = 0; i < arr.m_size; i++)
this->p_addr[i] = arr.p_addr[i];
this->m_size = arr.m_size;
return *this;
}
template<class T>
void MyArray<T>::pushBack(T data)
{
if (this->m_size >= this->m_capaCity)
return;
this->p_addr[this->m_size] = data;
this->m_size++;
}
void test01()
{
MyArray<int> arr1(20);
arr1.pushBack(4);
arr1.pushBack(3);
cout << "size: "<<arr1.m_size <<" capaCity: "<<arr1.m_capaCity<< endl;
for (int i = 0; i < arr1.m_size; i++)
cout << arr1.p_addr[i] << " ";
cout << endl;
MyArray<int> arr2 = arr1;
cout << "size: " << arr2.m_size << " capaCity: " << arr2.m_capaCity << endl;
for (int i = 0; i < arr2.m_size; i++)
cout << arr2.p_addr[i] << " ";
cout << endl;
MyArray<int> arr3(10);
arr3 = arr2;
cout << "size: " << arr2.m_size << " capaCity: " << arr2.m_capaCity << endl;
for (int i = 0; i < arr2.m_size; i++)
cout << arr2.p_addr[i] << " ";
cout << endl;
}
int main()
{
test01();
system("pause");
return 0;
}