类模板
2016-07-03 21:05
351 查看
需求:
写一个可变长度的数组类Array
用途于存放若干元素,个数未知
设计:
内部动态申请一个buffer
capacity:表示buffer的大小
size:表示buffer中已经存放元素的个数
接口:
Size();得到当前一个有多个元素
Capacity();最大容量
Clear();清空,使size为0,capacity不变
PushBack():附加一个元素
重载操作符():返回第几个元素(像数组一样操作它)
问题:这个类只适用于存放double型元素,如果要存放clear,float,int,以至于任意类型呢?
类模板
使用类模板,就可以适用于不同元素类型,避免创建很多个类型的类。
否则,要为每种类型创建一个类,例如:IntArray,DoubleArray……
使用方法:
Array arr(4);//创建array,初始capacity为4
可以把Array合起来看成一个类名
使用这个对象的方法和普通对象没有特别之处:
模板的定义通常放在头文件里面
写一个可变长度的数组类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;
模板的定义通常放在头文件里面
相关文章推荐
- Android Native 绘图方法
- C#中struct和class的区别详解
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- 深入了解PHP类Class的概念
- jquery 表单验证之通过 class验证表单不为空
- setAttribute 与 class冲突解决
- JavaScript通过HTML的class来获取HTML元素的方法总结
- JavaScript中的类(Class)详细介绍
- javascript面向对象包装类Class封装类库剖析
- jQuery针对input的class属性写了多个值情况下的选择方法
- 详解js中class的多种函数封装方法
- jQuery使用hide方法隐藏指定元素class样式用法实例
- jQuery给多个不同元素添加class样式的方法
- jQuery点击改变class并toggle及toggleClass()方法定义用法
- jquery采用oop模式class类的使用示例
- jquery点击改变class并toggle的实现代码
- JavaScript更改class和id的方法
- 一篇入门的php Class 文章
- 深入C++中struct与class的区别分析