设计一个数组模板类(MyArray),完成对不同类型元素的管理
#pragma once template<class T> class MyArray { public: explicit MyArray(int capacity) { this->m_Capacity = capacity; this->m_Size = 0; // 如果T是对象,那么这个对象必须提供默认的构造函数 pAddress = new T[this->m_Capacity]; } //拷贝构造 MyArray(const MyArray & arr) { this->m_Capacity = arr.m_Capacity; this->m_Size = arr.m_Size; this->pAddress = new T[this->m_Capacity]; for (int i = 0; i < this->m_Size;i++) { this->pAddress[i] = arr.pAddress[i]; } } //重载[] 操作符 arr[0] T& operator [](int index) { return this->pAddress[index]; } //尾插法 void Push_back(const T & val) { if (this->m_Capacity == this->m_Size) { return; } this->pAddress[this->m_Size] = val; this->m_Size++; } void Pop_back() { if (this->m_Size == 0) { return; } this->m_Size--; } int getSize() { return this->m_Size; } //析构 ~MyArray() { if (this->pAddress != NULL) { delete[] this->pAddress; this->pAddress = NULL; this->m_Capacity = 0; this->m_Size = 0; } } private: T * pAddress; //指向一个堆空间,这个空间存储真正的数据 int m_Capacity; //容量 int m_Size; // 大小 }; 测试代码: class Person{ public: Person(){} Person(string name, int age){ this->mName = name; this->mAge = age; } public: string mName; int mAge; }; void PrintMyArrayInt(MyArray<int>& arr){ for (int i = 0; i < arr.getSize(); i++){ cout << arr[i] << " "; } cout << endl; } void PrintMyPerson(MyArray<Person>& personArr) { for (int i = 0; i < personArr.getSize(); i++){ cout << "姓名:" << personArr[i].mName << " 年龄: " << personArr[i].mAge << endl; } } MyArray<int> myArrayInt(10); for (int i = 0; i < 9; i++) { myArrayInt.Push_back(i); } myArrayInt.Push_back(100); PrintMyArrayInt(myArrayInt); MyArray<Person> myArrayPerson(10); Person p1("德玛西亚", 30); Person p2("提莫", 20); Person p3("孙悟空",18); Person p4("赵信", 15); Person p5("赵云", 24); myArrayPerson.Push_back(p1); myArrayPerson.Push_back(p2); myArrayPerson.Push_back(p3); myArrayPerson.Push_back(p4); myArrayPerson.Push_back(p5);