编写数据类型约束为正则的动态数组Array类及复制语义的程序,复制语句输出为123
时间: 2024-03-26 19:39:28 浏览: 14
下面是一个数据类型约束为正则的动态数组Array类及复制语义的程序,复制语句输出为123:
```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(3);
arr1[0] = 1;
arr1[1] = 2;
arr1[2] = 3;
arr1.print();
// 复制动态数组
Array arr2 = arr1;
arr2.print();
// 修改动态数组
arr2[0] = 10;
arr2.print();
// 赋值动态数组
Array arr3(3);
arr3 = arr1;
arr3.print();
return 0;
}
```
在这个程序中,我们创建了一个大小为3的动态数组arr1,并将其元素设置为1、2、3。然后,我们复制这个动态数组到arr2中,并打印出来。接着,我们修改arr2的第一个元素,并打印出来。最后,我们将arr1赋值给arr3,并打印出来。程序输出为:
```
1 2 3
1 2 3
10 2 3
1 2 3
```
可以看到,复制语句输出为123。