#include<iostream>
using namespace std;
class Array
{
private:
int size;
int* a;
public:
Array(int sz=0);
Array(const Array& a);
~Array();
void push_back(int n);//数组尾部添加元素
int length();
int& operator[](int n);
Array& operator=(const Array& a);
};
//涉及空指针,注意考虑
Array::Array(int sz):size(sz)
{
if (sz == 0)a = NULL;//考虑sz为空的情况
else a = new int[size];
}
Array::Array(const Array& b)
{
if (!b.a)//拷贝对象为空
{
a = NULL;
size = b.size;
return;
}
else
{
size = b.size;
a = new int[size];
int* to = a, * from = b.a, i = size;
while (i--)
*(to++) = *(from++);
}
}
Array::~Array()
{
if(a)delete[]a;//不是空指针
}
void Array::push_back(int n)
{
if (a)
{
int* ptr = new int[size + 1];
int i = size, * to = ptr, * from = a;
while (i--)
{
*(to++) = *(from++);
}
a = ptr;
}
else a = new int[1];
a[size++] = n;
}
int Array::length()
{
return size;
}
int& Array::operator[](int n)
{
return a[n];
}
Array& Array::operator=(const Array& b)
{
if (!b.a)//拷贝对象为空
{
if (a)delete[]a;//涉及空指针,先判断再delete
a = NULL;
size = b.size;
return*(this);
}
else if (b.a == a);//内容相同
else if (b.size != size)//长度不相等
{
if (a)delete[]a;
size = b.size;
a = new int[size];
}
//赋值,深拷贝
{
int* to = a, * from = b.a, i = size;
while (i--)
*(to++) = *(from++);
用类实现动态数组
最新推荐文章于 2022-04-18 20:29:43 发布