您的位置:首页 > 编程语言 > C语言/C++

-数组类模板

2016-06-16 19:40 274 查看
/* 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;
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ class 函数 初学