1、理解下面的动态数组类模板,它由一系列位置连续、任意数量相同类型的元素组成,其元素个数可在程序运行时改变,并完成该类中没有完成的成员函数(不允许改变已有代码),并设计主函数,实现对该模板类的功能测试。 #include <iostream> using namespace std; #include <stdlib.h> //容错处理 enum ErrorType { invalidArraySize, memoryAllocatetionError, indexOutOfRang }; char *errorMsg[] = { "Invalid array size", "Memory allocation error", "Invalid index" }; template <class T> class Array { private: T* alist; int size; void Error(ErrorType error) const;//输出错误信息 public: Array(int sz=50);//构造函数 Array(const Array<T>& X);//拷贝构造函数 ~Array(void);//析构函数 Array<T>& operator=(const Array<T>& rhs);//重载赋值运算符 T& operator[](int i);//重载下标运算符 int GetSize(void) const;//获取数组大小 void Resize(int sz);//重新设置数组大小 }; template <class T> Array<T>::Array(int sz) { if(sz <= 0) Error(invalidArraySize); size = sz; alist = new T[size]; if(alist == 0) Error(memoryAllocatetionError); } template <class T> Array<T>::Array(const Array<T>& X) { int n = X.size; size = n; alist = new T[n]; if(alist == 0) Error(memoryAllocatetionError); T* srcptr = X.alist; T* destptr = alist; while(n--) *destptr++ = *srcptr++; } template<class T> Array<T>::~Array() { delete[] alist; } template <class T> Array<T>& Array<T>::operator=(const Array<T> &rhs) { int n = rhs.size; if(size != n) { delete[] alist; alist = new T[n]; if(alist == 0) Error(memoryAllocatetionError); size = n; } T* destptr = alist; T* srcptr = rhs.alist; while(n--) *destptr++ = *srcptr++; return *this; } template<class T> T& Array<T>::operator[](int n) { if(n < 0 || n > size-1) Error(indexOutOfRang); return alist[n]; } int main() { return 0; }
时间: 2024-03-15 17:42:07 浏览: 64
这个动态数组类模板实现了一个动态的、可变长的数组,其中包括构造函数、拷贝构造函数、析构函数、重载赋值运算符、重载下标运算符、以及获取数组大小和重新设置数组大小的函数。
在该模板类中,成员变量包括一个指向数组元素的指针alist和数组元素的个数size。成员函数包括构造函数、拷贝构造函数、析构函数、重载赋值运算符、重载下标运算符、获取数组大小和重新设置数组大小的函数。
该模板类中的构造函数实现了动态数组的初始化操作,拷贝构造函数用于实现动态数组的复制操作,析构函数用于释放动态数组所占用的内存。重载赋值运算符和重载下标运算符分别用于实现动态数组的赋值和元素访问操作。获取数组大小的函数用于获取当前动态数组的大小,重新设置数组大小的函数用于动态调整数组大小。
下面是完整的代码实现:
阅读全文