已知一维数组类模板ARRAY的定义如下,ARRAY与普通一维数组区别是:其重载的运算符[ ]要对下标是否越界进行检查。请完善程序。 #include using namespace std ; class ARRAY { private : T* v ; //指向存放数组数据的空间,T为类型参数 int s ; //数组大小 public : ARRAY(int n) { int i ; v = new T[n] ; //创建数组空间 s = n; for ( i = 0 ; i < n ; i++ ) { cin>> v[i]; } } ~ARRAY(void){ ; //释放数组空间 } int size(void){ return s ; } T& operator[](int n){ //[ ]运算符重载函数 if (n < 0 || n >= s){ cerr << "下标越界!" ; exit(1) ; } return v[n] ; } };
时间: 2024-01-27 08:05:49 浏览: 70
完善后的程序如下:
```cpp
#include <iostream>
using namespace std;
template <typename T>
class ARRAY {
private:
T* v; // 指向存放数组数据的空间,T为类型参数
int s; // 数组大小
public:
ARRAY(int n) {
int i;
v = new T[n]; // 创建数组空间
s = n;
for (i = 0; i < n; i++) {
cin >> v[i];
}
}
~ARRAY(void) {
delete[] v; // 释放数组空间
}
int size(void) {
return s;
}
T& operator[](int n) { // [ ]运算符重载函数
if (n < 0 || n >= s) {
cerr << "下标越界!";
exit(1);
}
return v[n];
}
};
int main() {
ARRAY<int> a(5);
for (int i = 0; i < a.size(); i++) {
cout << a[i] << " ";
}
return 0;
}
```
在模板类 `ARRAY` 中,定义了一个 `v` 指针,指向存放数组数据的空间,`s` 表示数组大小。构造函数中使用 `new` 运算符创建数组空间,并且使用 `delete` 运算符释放数组空间。`operator[]` 运算符重载函数中,如果下标越界,使用 `cerr` 输出错误信息,并使用 `exit` 函数退出程序。
在 `main` 函数中,使用 `ARRAY` 模板类创建一个 `int` 类型的数组 `a`,并且输出数组中的元素。
阅读全文