-数组类模板

来源:互联网 发布:360云盘数据没有了 编辑:程序博客网 时间:2024/04/30 02:59
/* Copyright (c) 2016* All rights reserved 烟台大学计算机与控制工程学院* 文件名称:3.cpp* 作者:刘丽* 完成日期:2016年 6 月 15日* 版本号: v1.0【项目-数组类模板】   在数组类的基础上,将之改造为类模板,以使数组中可以存储各种类型的数据。template <class T>  //数组类模板定义class Array{private:    T* list;        //用于存放动态分配的数组内存首地址    int size;       //数组大小(元素个数)...};*/#include<iostream>#include<cassert>using namespace std;template <class T>  //数组类模板定义class Array{private:    T* list;        //用于存放动态分配的数组内存首地址    int size;       //数组大小(元素个数)public:    Array(){};    Array(int sz);    Array(const Array<T> &t);    ~Array();    void rsize(int sz);    void display();    T &operator [](int );   Array<T> &operator = (const Array<T>& rhs);};template <class T>Array<T>::Array(int sz){    assert(sz>=0);    size=sz;    list=new T [size];for(int i=0;i<size;i++)list[i]=i;}template <class T> Array<T>::Array(const Array<T> &t){    T* l;    l=new T [t.size];    for(int i=0;i<t.size;i++)        l[i]=t.list[i];    list=l;size=t.size;}template <class T>Array<T>::~Array(){    delete []list;}template <class T> void Array<T>::rsize(int sz){    assert(sz>=0);     T* l;    l=new T [sz];       for(int i=0;i< (size=(size>sz)?sz:size);i++)        l[i]=list[i];    delete []list;    list=l; size=sz;}template <class T>  T &Array<T>::operator [](int i){      assert(i >= 0 && i < size);      return list[i];}template <class T> Array<T> &Array<T>::operator = (const Array<T>& rhs){    if (&rhs != this)    {//如果本对象中数组大小与rhs不同,则删除数组原有内存,然后重新分配        if (size != rhs.size)        {            delete [] list; //删除数组原有内存            size = rhs.size;    //设置本对象的数组大小            list = new T[size]; //重新分配n个元素的内存        }        //从对象X复制数组元素到本对象        for (int i = 0; i < size; i++)            list[i] = rhs.list[i];    }    return *this;   //返回当前对象的引用}template <class T> void Array<T>::display(){    for(int i=0;i<size;i++)        cout<<list[i]<<" ";    cout<<endl;}int main(){    Array<int> a(10);     Array<int> b(a);    cout<<"a:"<<endl;    a.display();    cout<<"b:"<<endl;    b.display();    a.rsize(11);    a.display();    a[10]=b[9];    a.display();            return 0;}



0 0