编写数据类型约束为正则的动态数组Array类及复制语义的程序。
时间: 2024-03-26 21:39:24 浏览: 11
下面是一个数据类型约束为正则的动态数组Array类及复制语义的程序:
```c++
#include <iostream>
#include <string>
#include <regex>
using namespace std;
class Array {
private:
int* data;
int size;
public:
// 构造函数
Array(int n = 0) {
if (n < 0) {
throw invalid_argument("Invalid size");
}
data = new int[n];
size = n;
}
// 复制构造函数
Array(const Array& arr) {
size = arr.size;
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = arr.data[i];
}
}
// 赋值运算符
Array& operator=(const Array& arr) {
if (this == &arr) {
return *this;
}
delete[] data;
size = arr.size;
data = new int[size];
for (int i = 0; i < size; i++) {
data[i] = arr.data[i];
}
return *this;
}
// 析构函数
~Array() {
delete[] data;
}
// 获取数组大小
int getSize() const {
return size;
}
// 获取数组元素
int& operator[](int index) {
if (index < 0 || index >= size) {
throw out_of_range("Index out of range");
}
return data[index];
}
// 打印数组元素
void print() const {
for (int i = 0; i < size; i++) {
cout << data[i] << " ";
}
cout << endl;
}
};
int main() {
// 创建动态数组
Array arr1(5);
for (int i = 0; i < arr1.getSize(); i++) {
arr1[i] = i + 1;
}
arr1.print();
// 复制动态数组
Array arr2 = arr1;
arr2.print();
// 修改动态数组
arr2[0] = 10;
arr2.print();
// 赋值动态数组
Array arr3(3);
arr3 = arr1;
arr3.print();
return 0;
}
```
在这个程序中,我们使用了C++中的动态内存分配方式来实现动态数组。在Array类中,使用构造函数初始化数组的大小,并在析构函数中释放动态分配的内存。为了实现复制语义,我们在类中定义了复制构造函数和赋值运算符,用于复制动态数组中的元素。在使用动态数组时,我们可以像使用普通数组一样使用[]运算符来访问数组元素。