案例描述:实现一个通用的数组类,要求如下
myArray.hpp
#pragma once //防止文件被重复包含
#include "iostream"
using namespace std;
template <class T>
class myArray{
private:
T *t;
int capacity;
int size;
public:
myArray(){
capacity = 5;
size = 0;
t=new T[capacity];
}
//有参构造函数
myArray(int cap):t(new T[cap]),capacity(cap),size(0){
//cout<<"有参构造"<<endl;
}
myArray(const myArray&a){
//cout<<"拷贝构造"<<endl;
this->size = a.size;
this->capacity = a.capacity;
this->t = new T[a.capacity];
for (int i = 0; i < a.size; ++i) {
this->t[i] = a.t[i];
}
}
myArray& operator=(const myArray &a){
//原先堆中有数据那么先清空 要返回引用 因为就是自己本身 this
if (this->t!= nullptr){
delete[]t;
t= nullptr;
capacity=0;
size=0;
}
//cout<<"等号重载"<<endl;
capacity=a.capacity;
size=a.size;
t=new T[capacity];
for (int i = 0; i < size; ++i) {
t[i] = a.t[i];
}
return *this;
}
~myArray(){
if (t!= nullptr){
delete[]t;
t = nullptr;
}
//cout<<"析构函数"<<endl;
}
//尾插法
bool pushBack(const T&t){
if (capacity==size)
return false;
this->t[size] = t;
size++;
return true;
}
//尾删法
bool popBack(){
if (size==0)
return false;
this->size--;
return true;
}
//通过下标方式访问数组元素
//函数调用的结果要作为左值存在,返回引用
T& operator[](int index){
if (index>size||index<0)
throw "下标越界";
return this->t[index];
}
//返回容量
int getCapacity(){
return capacity;
}
//返回大小
int getSize(){
return size;
}
};