设计一个数组类模板 ARRAY,存储固定大小的数据。要求 1. 可以存储整型、字符型、浮点型数据; 2. 成员函数:构造函数、析构函数 3. 重载运算符[]以访问数组元素,运算符= 以来自另一 ARRAY 的每个元素重 写 ARRAY 的对应元素 4. 编写程序,使用该类模板存储 10 个字符串,遍历并输出
时间: 2024-03-14 14:46:16 浏览: 60
好的,我来逐一回答你的问题。
首先,为了实现要求的功能,我们可以设计如下的 ARRAY 类模板:
```c++
template <typename T, int N>
class ARRAY {
public:
ARRAY(); // 构造函数
~ARRAY(); // 析构函数
T& operator[](int index); // 重载运算符[]
ARRAY& operator=(const ARRAY& other); // 重载运算符=
private:
T data[N]; // 存储数据的数组
};
```
其中,`T` 表示存储的数据类型,`N` 表示数组的大小。成员变量 `data` 是一个长度为 `N` 的数组,用来存储数据。
接下来,我们来逐一实现每个成员函数的功能。
首先是构造函数和析构函数:
```c++
template <typename T, int N>
ARRAY<T, N>::ARRAY() {}
template <typename T, int N>
ARRAY<T, N>::~ARRAY() {}
```
由于我们只是简单地存储了一些数据,所以构造函数和析构函数可以为空。
然后是重载运算符[],用于访问数组元素:
```c++
template <typename T, int N>
T& ARRAY<T, N>::operator[](int index) {
return data[index];
}
```
这里返回的是一个引用,可以通过 `array[i]` 的形式来访问数组中的第 `i` 个元素。
最后是重载运算符=,用于从另一个 ARRAY 中复制每个元素到当前对象的对应元素:
```c++
template <typename T, int N>
ARRAY<T, N>& ARRAY<T, N>::operator=(const ARRAY& other) {
if (this != &other) {
for (int i = 0; i < N; i++) {
data[i] = other.data[i];
}
}
return *this;
}
```
这里首先进行了自我赋值的检查,然后遍历另一个 ARRAY 的每个元素,并将其复制到当前对象的对应元素中,最后返回当前对象的引用。
最后,我们来编写一个程序,使用该类模板存储 10 个字符串,并遍历并输出:
```c++
int main() {
ARRAY<string, 10> arr;
arr[0] = "hello";
arr[1] = "world";
arr[2] = "this";
arr[3] = "is";
arr[4] = "a";
arr[5] = "test";
arr[6] = "for";
arr[7] = "ARRAY";
arr[8] = "class";
arr[9] = "template";
for (int i = 0; i < 10; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
输出结果为:
```
hello world this is a test for ARRAY class template
```
这样,我们就完成了题目要求的所有功能。
阅读全文