c++帮助设计类ConstArray和Array,它们表示一种int值的动态数组

c++ Help designing class ConstArray and Array which represent a kind of dynamic array of int values

本文关键字:一种 int 数组 动态 表示 ConstArray 设计类 帮助 Array c++      更新时间:2023-10-16

我想我会先说整个问题,然后在下面评论我的问题。

规格您应该设计两个类ConstArray和Array,它们表示一种int值的动态数组(类似于标准库valarray模板)。

ConstArray类ConstArray的设计应使其行为类似于内容无法更改的常量数组。内存将动态分配和释放。数组的大小和内容是在构造类的对象时确定的。至少应实施以下成员:

size_type, element_type 

-对应类型的公共类型定义(typedef)。

size()

-返回数组的元素数。

operator [] (int) const 

-返回第k个元素的value元素。

执行深度复制操作的复制构造函数。

一个构造函数,可用于使用C样式数组中的数据初始化数组。

一个析构函数,用于释放任何动态分配的内存。

阵列类Array将从ConstArray派生而来。除了类功能之外,还可以更改数组对象的大小和内容。应提供以下额外成员

operator=(const ConstArray&) 

-将ConstArray分配给阵列

operator=(const Array&) 

-阵列的分配

operator[](int) 

-返回对第k个元素的引用

resize()

-更改数组中的元素数。此操作可能会破坏数组的当前内容。

现在解决我的问题我真的不知道如何在其中实现size_type和element_type。我知道它们是typedef,所以基本上是别名,但从那以后我真的不明白。

什么是"深度复制操作"?

什么是C样式数组?我真的不知道如何设置构造函数来初始化数组的大小。我在哪里确定尺寸?它没有要求用户输入它或任何东西。

谢谢。

我真的不知道如何在其中实现size_type和element_type。

正如你所说,它们只是typedef。您可以在类的作用域中定义类型,例如:

class ConstArray {
public:
    typedef int size_type;
};

之后,您可以随时使用size_type来获取或返回数组的大小。

什么是"深度复制操作"?

当您动态分配数据内存时,最终会得到一个指向数组数据(类型为element_type*)的指针。浅拷贝只会复制指针,这样您最终会得到两个引用相同共享数据的对象(很危险,因为不清楚谁负责释放内存)。另一方面,深度复制将分配一个新数组,并复制所有数据,这样您最终会得到两个对象,每个对象都有自己的数据数组。

什么是C样式数组?

指向数据的指针,以及数组的大小。在你的作业中,实现一个构造函数ConstArray(element_type* data, size_type size)

我在哪里确定尺寸?

您需要使用一个单独的构造函数参数来请求它,请参见上文。使用构造函数的人也知道现有(!)数据数组的大小。

相关文章: