第14周项目 2—数组类模板

来源:互联网 发布:重庆行知教育集团 编辑:程序博客网 时间:2024/04/30 11:30


*Copyright(c) 2016.烟台大学计算机与控制工程学院
*ALL rights  reserved.
  *文件名称:main.cpp
  *作者:孙亚茹
*完成日期:2016年6月14日
*问题描述:在数组类的基础上,将之改为类模板。
*//

#include <iostream>#include <iomanip>#include <cassert>using namespace std;template <class T>class Array{private:    T* list;    int size;public:    //成员函数声明    Array(int sz = 50);    Array(T a[], int sz);    Array(const Array &a);    ~Array();    Array operator + (const Array &a2);    Array &operator = (const Array &a2);    T &operator[] (int i);    const T &operator[] (int i) const;    int getSize() const;    void resize(int sz);    void show()const;};template <class T>Array<T>::Array(int sz){    assert(sz >= 0);    size = sz;    list = new T [size];}template <class T>Array<T>::Array(T a[],int sz){    assert(sz >= 0);    size = sz;    size=sz;    list=new T[size];    int i;    for(i=0; i<size; i++)        list[i]=a[i];}template <class T>Array<T>:: ~Array(){    delete []list;}template <class T>Array<T>::Array(const Array &a){    size=a.size;    list=new T [size];    int i;    for(i=0; i<size; i++)        list[i]=a.list[i];}template <class T>Array<T> Array<T>::operator + (const Array &a2){    assert(size == a2.size);    Array total(size);    for (int i = 0; i < size; i++)        total.list[i] = list[i]+a2.list[i];    return total;}template <class T>Array<T> &Array<T>::operator = (const Array &a2){    int i;    if(&a2!=this)    {        if(a2.size!=size)        {            delete []list;            size=a2.size;            list=new T [size];            for(i=0; i<size; i++)                list[i]=a2.list[i];        }    }    return *this;}template <class T>T &Array<T>::operator[]( int n){    if(n>=0&&n<size);    return list[n];}template <class T>const T &Array<T>::operator[] (int n) const{    if(n >= 0 && n < size);    return list[n];}template <class T>int Array<T>::getSize() const{    return size;}template <class T>void Array<T>::resize(int sz){    assert(sz >= 0);    if (sz == size)        return;    T* newList = new T [sz];    T n = (sz < size) ? sz : size;    for (int i = 0; i < n; i++)        newList[i] = list[i];    delete[] list;    list = newList;    size = sz;}template <class T>void Array<T>::show()const{    int i;    for(i=0; i<size; i++)        cout<<list[i]<<" ";    cout<<endl;}//要求测试函数能够运行出正确、合理的结果:int main(){    int a[8]= {1,2,3,4,5,6,7,8};    int b[8]= {10,20,30,40,50,60,70,80};    Array<int> array1(a,8),array3,array4;    const Array<int> array2(b,8);    array4=array3=array1+array2;    array3.show();    array4.resize(20);    array4[8]=99;    cout<<array4[8]<<endl;    cout<<array2[3]<<endl;    return 0;}

总结:、

          改为类模板后数组可以储存任意一个类型的数据,但同时类的成员函数也要写为类模板的形式,  主函数中数组声明时也要按着类模板的写。如: Array<int> array1(a,8),array3,array4;
    const Array<int> array2(b,8);

0 0