// Marray框架.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T>
class MyArray {
public:
MyArray(int capacity)
{
this->mCapacity = capacity;
this->mSize = 0;
this->pAddr = new T[this->mCapacity];
}
MyArray(const MyArray<T>& arr)
{
this->mSize = arr.mSize;
this->mCapacity = arr.mCapacity;
this->pAddr = new T[this->mCapacity];
for (int i = 0; i < this->mSize; i++)
{
this->pAddr[i] = arr.pAddr[i];
}
}
T &operator[](int index)
{
return this->pAddr[index];
}
MyArray<T> operator=(const MyArray<T> & arr)
{
if (this->pAddr != NULL)
delete[] this->pAddr;
this->mSize = arr.mSize;
this->mCapacity = arr.mCapacity;
this->pAddr = new T[this->mCapacity];
for (int i = 0; i < this->mSize; i++)
{
this->pAddr[i] = arr.pAddr[i];
}
return *this;
}
void PushBack(T &data)
{
if (this->mSize >= this->mCapacity)
return;
//调用拷贝构造 或者等号操作符
//1 对象元素必须能够被拷贝
//2.容器都是值寓意,不是引用寓意,向容器中放入的都是元素的拷贝,不是元素本身
//3如果元素成员有指针,注意深拷贝,浅拷贝
this->pAddr[this->mSize] = data;
this->mSize++;
}
void PushBack(T &&data)//对右值取引用
{
if (this->mSize >= this->mCapacity)
return;
this->pAddr[this->mSize] = data;
this->mSize++;
}
~MyArray()
{
if (this->pAddr != NULL)
delete []this->pAddr;
}
public:
int mCapacity;
int mSize;
T *pAddr;
};
class Person {
};
void test02()
{
Person p1, p2;
MyArray<Person> arr(10);
arr.PushBack(p1);
arr.PushBack(p2);
}
void test01()
{
MyArray<int> arr1(10);
int a = 1, b = 2;
arr1.PushBack(a);
arr1.PushBack(b);
arr1.PushBack(3);
arr1.PushBack(4);
for (int i = 0; i < arr1.mSize; i++)
{
cout << arr1[i] << " ";
}
cout << endl;
}
int main()
{
test01();
return 0;
}
MyArray
猜你喜欢
转载自blog.csdn.net/weixin_41375103/article/details/104594025
今日推荐
周排行