下面是一个Array类定义,实现数组功能,请在类体外为其添加构造函数、复制构造函数、析构函数、赋值运算符函数,下标运算符函数。
时间: 2024-03-10 11:45:43 浏览: 69
以下是一个Array类的定义:
```cpp
class Array {
private:
int *data;
int size;
public:
// 构造函数
Array(int s);
// 复制构造函数
Array(const Array& arr);
// 析构函数
~Array();
// 赋值运算符函数
Array& operator=(const Array& arr);
// 下标运算符函数
int& operator[](int index);
// 获取数组大小
int getSize() const;
};
```
在类体外为其添加构造函数、复制构造函数、析构函数、赋值运算符函数、下标运算符函数的实现:
```cpp
// 构造函数
Array::Array(int s)
{
size = s;
data = new int[size];
}
// 复制构造函数
Array::Array(const Array& arr)
{
size = arr.size;
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = arr.data[i];
}
}
// 析构函数
Array::~Array()
{
delete[] data;
}
// 赋值运算符函数
Array& Array::operator=(const Array& arr)
{
if (this != &arr) {
delete[] data;
size = arr.size;
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = arr.data[i];
}
}
return *this;
}
// 下标运算符函数
int& Array::operator[](int index)
{
if (index < 0 || index >= size) {
throw out_of_range("Index out of range");
}
return data[index];
}
// 获取数组大小
int Array::getSize() const
{
return size;
}
```
注意,这里实现的赋值运算符函数使用了自赋值检查。如果没有自赋值检查,当我们对同一个对象进行连续赋值时,就会出现问题。比如:
```cpp
Array a(10);
a[0] = 1;
a[1] = 2;
a = a; // 自赋值,如果没有自赋值检查,就会出现问题
```
最后要注意的是,这里我们在下标运算符函数中使用了 `throw` 语句,抛出了一个 `out_of_range` 异常。这是因为如果访问超出数组下标范围的元素,就会发生越界访问,导致程序崩溃。因此,我们在下标运算符函数中加入了异常处理机制,保证程序的健壮性。
阅读全文