设计通用数组类模板 数据: T *data;//数组首地址 int size; //数组规模 操作: 构造函数、拷贝构造函数; 赋值运算、下标运算、输入/输出等运算符的重载; 测试:分别用int型数组、double型数组对该类模板进行测试。
时间: 2023-06-19 11:07:16 浏览: 106
python数据分析之numpy库初识
下面是一个通用的数组类模板的实现,包含构造函数、拷贝构造函数、赋值运算符、下标运算符、输入/输出运算符的重载。
```c++
#include <iostream>
using namespace std;
template<typename T>
class Array {
private:
T *data; // 数组首地址
int size; // 数组规模
public:
// 构造函数
Array(int s = 0) {
size = s;
data = new T[size];
}
// 拷贝构造函数
Array(const Array<T>& other) {
size = other.size;
data = new T[size];
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
}
// 赋值运算符
Array<T>& operator=(const Array<T>& other) {
if (this == &other) {
return *this;
}
size = other.size;
if (data != nullptr) {
delete[] data;
}
data = new T[size];
for (int i = 0; i < size; i++) {
data[i] = other.data[i];
}
return *this;
}
// 下标运算符重载
T& operator[](int index) {
if (index < 0 || index >= size) {
throw out_of_range("Index out of range");
}
return data[index];
}
// 输入运算符重载
friend istream& operator>>(istream& in, Array<T>& arr) {
for (int i = 0; i < arr.size; i++) {
in >> arr.data[i];
}
return in;
}
// 输出运算符重载
friend ostream& operator<<(ostream& out, const Array<T>& arr) {
for (int i = 0; i < arr.size; i++) {
out << arr.data[i] << " ";
}
return out;
}
// 析构函数
~Array() {
if (data != nullptr) {
delete[] data;
}
}
};
int main() {
// 测试int型数组
Array<int> arr(5);
cin >> arr;
cout << arr << endl;
// 测试double型数组
Array<double> darr(3);
cin >> darr;
cout << darr << endl;
return 0;
}
```
这个数组类模板使用了模板参数 T,可以用来创建任意类型的数组。构造函数和拷贝构造函数用来初始化数组,赋值运算符用来复制一个数组到另一个数组,下标运算符用于访问数组中的元素,输入/输出运算符用于输入输出数组内容。在主函数中,我们分别用 int 和 double 来测试这个数组类模板。
阅读全文