您的位置:首页 > 其它

类模板

2016-07-03 21:05 351 查看
需求:

写一个可变长度的数组类Array

用途于存放若干元素,个数未知

设计:

内部动态申请一个buffer

capacity:表示buffer的大小

size:表示buffer中已经存放元素的个数

class Array
{
public:
Array(int capacity=16)
{
m_buffer=new double[capacity];
m_capacity=capacity;
m_size=0;
}
void PushBack(double val)
{
if(m_size >=m_capacity)
{
Resize();
}
m_buffer[m_size]=val;
m_size++;
}
int Capacity()
{
return m_capacity;
}
private:
void Resize()
{
//创建一个更大的缓冲区
int n=m_capacity + 16;
double *buf=new double
;
//拷贝原有的内容
memcpy(buf,m_buffer,m_capacity);
//删除旧的内容,释放其内容
delete [] m_buffer;
//更新一下成员变量
m_capacity=n;
m_buffer=buf;

}
private:
double * m_buffer;
int m_capacity;//容量
int m_size;//已经存放的对象的个数
};
int main()
{
Array a;
a.PushBack(1);
a.PushBack(2);
a.PushBack(3);
a.PushBack(4);
a.PushBack(5);
}


接口:

Size();得到当前一个有多个元素

Capacity();最大容量

Clear();清空,使size为0,capacity不变

PushBack():附加一个元素

重载操作符():返回第几个元素(像数组一样操作它)

问题:这个类只适用于存放double型元素,如果要存放clear,float,int,以至于任意类型呢?

类模板

template <typename T>
class Array
{
};


使用类模板,就可以适用于不同元素类型,避免创建很多个类型的类。

否则,要为每种类型创建一个类,例如:IntArray,DoubleArray……

使用方法:

Array arr(4);//创建array,初始capacity为4

可以把Array合起来看成一个类名

使用这个对象的方法和普通对象没有特别之处:

arr.PushBack(123);
arr.PushBack(456);
int size=arr.Size();
arr[0]=100;


模板的定义通常放在头文件里面
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class