程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现

注意事项:    请注意动态对capacity进行赋值

任务描述
ArrayList 类是一个比较复杂的类,首先需要实现其构造函数。要求用户为 ArrayList 类提供 4 种构造函数。分别是:

默认构造函数
使用该函数构造出的数组对象,逻辑上是空的;

拷贝构造函数
使用该函数构造出的输出对象,逻辑上的内容应与参数一模一样;

原生输出构造函数
给定一个 C++ 的原生数组,构造出内容一模一样的数组对象;

填充构造函数
给定参数 n 与 value ,构造出一个数组对象,其内容是 n 个 value。

在构造函数中,涉及到申请内存。凡是与系统资源打交道的代码一定要做异常检测。内存就是一种系统资源,所以一定要坚持申请内存是否成功。不过本关暂时忽略这一步。

此外,还需要实现析构函数。这是本课程中第一个必须自行实现析构函数的类。之前的 Int 类与 Array 类直接使用系统提供的缺省构造函数也是可以的。

相关知识
从数据结构的角度,ArrayList 类是一个顺序表;从 C++ 语言的角度,ArrayList 类是一个动态数组,就如同 STL vector 一样。不过此处仅实现一个容纳 int 类型的动态数组,而 STL vector 是一个模板类。

ArrayList 类一共包含 3 个成员。

int *data;
int size;
int capacity;
其中,data 指向数据真正保存的地方。size 表示当前保存的数据个数。capacity 表示当前能保存的最大个数即容量。

当容量不够的时候,例如容量已满但仍然要执行插入操作。此时可以先重新分配一段更大的内存,然后将原数据拷贝以及插入,最后释放旧的内存。因此,原则上只要能够申请内存,ArrayList 能够保存的数据个数是没有上限的。

编程要求
根据提示,在右侧编辑器的Begin-End区域内补充代码。

测试说明
该项目一共有3个文件,main.cpp、ArrayList.h 和 ArrayList.cpp。其中 main.cpp 是测试文件,ArrayList.h 包含 ArrayList 类的定义和成员函数声明。用户仅能修改 ArrayList.cpp 中的内容,在其中实现 ArrayList 的成员函数。
ArrayList.h 的内容如下

#include 
using namespace std;
#include "ArrayList.h"

ArrayList::ArrayList()
{
    data = new int[100];  // 分配100个元素的内存
    size = 0;
    capacity = 100;
}

ArrayList::ArrayList(const ArrayList& rhs)
{
    this->size = rhs.getSize();
    capacity = rhs.capacity;  // 根据源对象的容量设置
    data = new int[capacity]; // 使用适当的容量
    for (int i = 0; i < size; i++) {
        data[i] = rhs.data[i];
    }
}

ArrayList::ArrayList(int const a[], int n)
{
    size = n;
    capacity = n > 100 ? n : 100;  // 如果n大于100,调整capacity
    data = new int[capacity];  // 根据size分配内存
    for (int i = 0; i < size; i++) {
        data[i] = a[i];
    }
}

ArrayList::ArrayList(int n, int value)
{
    size = n;
    capacity = n > 100 ? n : 100;  // 如果n大于100,调整capacity
    data = new int[capacity];  // 根据size分配内存
    for (int i = 0; i < size; i++) {
        data[i] = value;
    }
}

ArrayList::~ArrayList()
{
    delete[] data;  // 使用delete[]来释放数组内存
}


你可能感兴趣的:(java,jvm,开发语言)