MyArray.hpp
#pragma once
#include<iostream>
#include<string>
using namespace std;
template<class T>
class MyArray
{
public:
//构造
explicit MyArray(int capacity) //防止隐式类型转换,防止MyArray arr =10
{
this->m_Capacity = capacity;
this->m_Size = 0;
this->pAddress = new T[this -> m_Capacity];
}
MyArray(const MyArray &array)
{
this->m_Capacity = array.m_Capacity;
this->m_Size = array.m_Size;
this->pAddress = new T[this->m_Capacity];
for (int i = 0; i < m_Size; i++)
{
this->pAddress[i] = array[i];
}
}
~MyArray()
{
if (this->pAddress != NULL)
{
delete[]this->pAddress;
this->pAddress = NULL;
}
}
//赋值操作符重载 防止浅拷贝
MyArray & operator = (MyArray & array)
{
//先判断原始数据,有就清空
if (this->pAddress != NULL)
{
delete[]this->pAddress;
this->pAddress = NULL;
}
this->m_Capacity = array.m_Capacity;
this->m_Size = array.m_Size;
this->pAddress = new T[this->m_Capacity];
for (int i = 0; i < m_Size; i++)
{
this->pAddress[i] = array[i];
}
}
//[]重载
/*MyArray arr(10)
arr[0] = 100;*/
T & operator [](int index)
{
return this->pAddress[index];
}
//尾插法
void push_Back(T val)
{
this->pAddress[this->m_Size] = val;
this->m_Size++;
}
//获取大小
int getSize()
{
return m_Size;
}
//获取容量
int getCapacity()
{
return m_Capacity;
}
private:
T * pAddress; //指向堆区指针
int m_Capacity; //容量
int m_Size;
};
test.cpp
#include"MyArray.hpp"
#include<string>
#include<iostream>
using namespace std;
//输出int 类型数组
void printIntArray(MyArray<int>&array)
{
for (int i = 0; i < array.getSize(); i++)
{
cout << array[i] << endl;
}
}
class Person
{
public:
//默认构造
Person(){}
Person(string name, int age)
{
this->m_Name = name;
this->m_Age = age;
}
string m_Name;
int m_Age;
};
//输出Person类型的数组
void printPersonArray(MyArray<Person > &array)
{
for (int i = 0; i < array.getSize(); i++)
{
cout << "姓名:" << array[i].m_Name << "年龄:" << array[i].m_Age << endl;
}
}
int main()
{
MyArray<int>arr(10);
for (int i = 0; i < 10; i++)
{
arr.push_Back(i + 100);
}
printIntArray(arr);
Person p1("MT", 10);
Person p2("呆贼", 12);
Person p3("傻馍", 13);
Person p4("劣人", 14);
MyArray<Person>arr2(10);
arr2.push_Back(p1);
arr2.push_Back(p2);
arr2.push_Back(p3);
arr2.push_Back(p4);
printPersonArray(arr2);
system("pause");
return 0;
}