类模板练习实现MyArray

类模板练习实现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;
}
posted @ 2020-02-06 12:14  iucbjb  阅读(64)  评论(0)    收藏  举报