-数组类模板

/* 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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值