#include <iostream>
using namespace std;
template <typename T>
class CArray{
private:
int mCapacity;
int mSize;
T *ptr;
public:
CArray(int capacity);
CArray(const CArray<T> &arr);
T &operator[](int index);
CArray<T> &operator=(const CArray<T> &arr);
void pushBack(T &data);
void pushBack(T &&data);
void show();
~CArray();
};
template <typename T>
CArray<T>::CArray(int capacity)
{
this->mCapacity = capacity;
this->mSize = 0;
this->ptr = new T[this->mCapacity];
}
template <typename T>
CArray<T>::CArray(const CArray<T> &arr)
{
this->mCapacity = arr.mCapacity;
this->mSize = arr.mSize;
this->ptr = new T[this->mCapacity];
for(int i=0; i<this->mSize; i++)
this->ptr[i] = arr.ptr[i];
}
template <typename T>
T &CArray<T>::operator[](int index)
{
return ptr[index];
}
template <typename T>
CArray<T> &CArray<T>::operator=(const CArray<T> &arr)
{
if(this->ptr != nullptr)
delete[] this->ptr;
this->mCapacity = arr.mCapacity;
this->mSize = arr.mSize;
this->ptr = new T[this->mCapacity];
for(int i=0; i<this->mSize; i++)
this->ptr[i] = arr.ptr[i];
return *this;
}
template <typename T>
void CArray<T>::pushBack(T &data)
{
if(this->mSize>=this->mCapacity)
{
cout << "There is no position in capacity!" << endl;
return;
}
else
{
this->ptr[this->mSize] = data;
this->mSize++;
}
}
template <typename T>
void CArray<T>::pushBack(T &&data) //&&为右值引用,以接收右值参数
{
if(this->mSize>=this->mCapacity)
{
cout << "There is no position in capacity!" << endl;
return;
}
else
{
this->ptr[this->mSize] = data;
this->mSize++;
}
}
template <typename T>
void CArray<T>::show()
{
for(int i=0; i<this->mSize; i++)
cout << this->ptr[i] << " ";
}
template <typename T>
CArray<T>::~CArray()
{
delete[] this->ptr;
}
int main()
{
CArray<char> arr(10);
int lvalue = 'a';
arr.pushBack(lvalue); //左值参数
arr.pushBack('a'); //右值参数
arr.pushBack('b');
arr.pushBack('c');
CArray<char> arr1(arr); //调用拷贝构造函数
CArray<char> arr2(5);
arr2 = arr1; //=运算符重载
arr2.show();
return 0;
}