类模板
2015-09-01 23:25
183 查看
1、类模板
类模板跟函数模板一样,类模板也是对数据的类型进行了参数化处理,
将数据的类型泛华,这样一个函数可以调用不同类型 的数据进行处理,这就是模板的方便之处,不用重复的定义调用不同数据类型的函数,
下面是不用函数模板的代码:
这个类只能处理int 类型的整数,不能处理float型 double型,char型的数据,想要处理这些类型的数据,
必须重新定义相应数据的类
如果定义为模板类,这些过程都可以省略
定义一个模板类,这样都可以吹各种类型的数据,提高的效率
2、模板的定义
一个类模板的定义时以关键字template开始的,后面跟一堆尖括号,括号内容是模板的参数列表
语法:
template<typename T ,typename T1....................>
class 类模板名
{
}
注意当在类外定义成员函数时,成员函数的上面得写类模板的表达式
stack<T> 表示一个容器,存储的数据类型是T型
模板函数还可以包含非类型参数例如:
stack<class T,int size=100>
模板的范例:
3、模板函数中的非参数类型
类模板跟函数模板一样,类模板也是对数据的类型进行了参数化处理,
将数据的类型泛华,这样一个函数可以调用不同类型 的数据进行处理,这就是模板的方便之处,不用重复的定义调用不同数据类型的函数,
下面是不用函数模板的代码:
<span style="font-size:18px;">class Stack { public: void push(int i); int pop(); private: enum { size = 100 }; int sarray[size]; int scout; };</span>
这个类只能处理int 类型的整数,不能处理float型 double型,char型的数据,想要处理这些类型的数据,
必须重新定义相应数据的类
如果定义为模板类,这些过程都可以省略
<span style="font-size:18px;">template <typename> T class Stack { public: void push(int i); T pop(); private: enum { size = 100 }; T sarray[size]; int scout; };</span>
定义一个模板类,这样都可以吹各种类型的数据,提高的效率
2、模板的定义
一个类模板的定义时以关键字template开始的,后面跟一堆尖括号,括号内容是模板的参数列表
语法:
template<typename T ,typename T1....................>
class 类模板名
{
}
注意当在类外定义成员函数时,成员函数的上面得写类模板的表达式
stack<T> 表示一个容器,存储的数据类型是T型
<span style="font-size:18px;">template <typename> T class Stack { public: void push(int i); T pop(); private: enum { size = 100 }; T sarray[size]; int scout; }; template <typename T> T stack<T>::pop() { return sarray[]; }</span>
模板函数还可以包含非类型参数例如:
stack<class T,int size=100>
模板的范例:
#include<cstdlib> #include<iostream> using namespace std; template<typename T,int size=100> class Stack { public: Stack() :sicout(0){} bool push(constT &i); bool pop(T &i); int get_size() const { return sicout; } private: T s_iarray[size]; int sicout; }; template<typename T,int size> bool Stack<T, size>::push(const T &i) { if (sicout < size) { s_iarray[sicout++] = i; return true; } else { return false; } } template<typename T,int size> bool Stack<T, size>::pop(T &i) { if (sicout >= 0) { i = s_iarray[--sicout]; return true; } else { return false; } } int main() { cout << "模板" < endl; Stack<int>iv; iv.push(1); cout << "压入1" << endl; iv.push(2); cout << "压入2" << endl; iv.push(3); cout << "压入3" << endl; cout << "元素个数" << endl; cout << iv.get_size() << endl; cout << "单出元素" << endl; int e = 0; iv.pop(e); cout << e << endl; system("pause"); return 0; }
3、模板函数中的非参数类型
相关文章推荐
- qsort的用法
- Volley网络框架学习笔记(三)
- C++ operator new 重载(两个参数)
- 百度Ueditor编辑器取消多图上传对话框中的图片搜索
- python 基础格式化输出
- Android Security
- JS面向对象的程序设计
- 条款02 尽量以const enum inline 替换#define
- ios开发之UI基础--transframe属性
- 使用WebGL实现一个Viewer来显示STL文件
- 笔记本电脑蓝屏问题处理
- 位向量法排序
- Spring Internals -- 目录
- Java多线程基础(三)Java传统线程互斥技术
- Java监听器
- 百度地图sdk开发笔记
- 总结自己的Git常用命令
- 远程桌面
- LeetCode_DP_Unique Paths
- zabbix 安装