题目:设计实现一个存储任意类型元素的动态数组类模板Array,要求如下:
(1)存放数组元素的空间动态申请,定义成员函数时不得造成内存泄露;
(2)定义构造函数和复制构造函数;
(3)重载下标运算符[ ]、关系运算符==;
(4)重载输入运算符>>,输出运算符<<;
(5)编写测试程序,对以上所有功能进行测试。
代码实现:
#include<iostream>
using namespace std;
template<typename T>
class Array{
private:
int size;
T *data=NULL;
public:
Array<T>(int len,T*a){//构造函数
size=len;
data=new T[size];
if(a){
for(int i=0;i<size;i++){
data[i]=a[i];
}
}
}
Array<T>(const Array<T> &rhs){//复制构造函数
size = rhs.size;
data = new T[size];
for(int i=0;i<size;i++){
data[i] = rhs.data[i];
}
}
T operator[](int index){//重载[]运算符
return data[index];
}
int operator==(const Array<T> &rhs){//重载==运算符
for(int i=0;i<size;i++){
if(data[i]!=rhs.data[i]){
return 0;
}
}
return 1;
}
friend ostream& operator<<(ostream &os,const Array<T> &rhs){//重载输出运算符<<
for(int i=0;i<rhs.size;i++){
os<<rhs.data[i]<<" ";
}
os<<endl;
return os;
}
friend istream& operator>>(istream &is,Array<T> &rhs){//重载输入运算符>>
for(int i=0;i<rhs.size;i++){
is>>rhs.data[i];
}
return is;
}
};
int main(){
int a[6]={1,2,3,4,5,6};
//测试构造函数
Array<int> A(6,a);
//测试复制构造函数
Array<int> B(A);
//测试重载的输出运算符<<
cout<<A<<endl;
cout<<B<<endl;
//测试重载的下标运算符[]
cout<<"对象A的第六个元素为:" ;
cout<<(A[5])<<endl;
//测试关系运算符==
if(A==B){
cout<<"A==B"<<endl;;
}
int n;
cout<<"您要输入的元素的个数为:";
cin>>n;
Array<int> C(n,NULL);
cout<<"请输入您要输入的"<<n<<"个元素:"<<endl;
//测试重载的输入运算符>>
cin>>C;
cout<<C<<endl;
return 0;
}
运行结果: