模板
模板定义:模板就是实现代码重用机制的一种工具。它能够实现类型參数化,即把类型定义为參数。 从而实现了真正的代码可重用性。
模版能够分为两类。一个是函数模版,另外一个是类模版。
1、 函数模板
函数模板的一般形式例如以下:
Template <class或者也能够用typename T>
返回类型 函数名(形參表)
{//函数定义体 }
说明:
(1)template是一个声明模板的keyword,表示声明一个模板keyword。
(2)<>里面的是模板參数。class和typename不能省略,每一个形參前都要加class 或typename。
代码例如以下:
//Test.cpp #include <iostream> using std::cout; using std::endl; //声明一个函数模版,用来比較输入的两个同样数据类型的參数的大小。class也能够被typename取代, //T能够被不论什么字母或者数字取代。template <class T> T min(T x,T y) { return(x<y)?x:y;} void main( ) { int n1=2,n2=10; double d1=1.5,d2=5.6; cout<< "较小整数:"<<min(n1,n2)<<endl; cout<< "较小实数:"<<min(d1,d2)<<endl; system("PAUSE"); }
2、类模板
定义一个类模板:
Template < class或者也能够用typename T >
class类名{
//类定义......
}。
说明:
(1)template是声明各模板的keyword,表示声明一个模板,
(2)<>里是模板參数。模板參数能够是一个,也能够是多个。
代码例如以下:
#ifndef ClassTemplate_HH #define ClassTemplate_HH template<typename T1,typename T2> class myClass{ private: T1 I; T2 J; public: myClass(T1 a, T2 b);//Constructor void show(); }; //这是构造函数 //注意这些格式 template <typename T1,typename T2> myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){} //这是void show(); template <typename T1,typename T2> void myClass<T1,T2>::show() { cout<<"I="<<I<<", J="<<J<<endl; } #endif
// Test.cpp #include <iostream> #include "ClassTemplate.h" using std::cout; using std::endl; void main() { myClass<int,int> class1(3,5); class1.show(); myClass<int,char> class2(3,'a'); class2.show(); myClass<double,int> class3(2.9,10); class3.show(); system("PAUSE"); }
非类型模版參数
一般来说。非类型模板參数能够是常整数(包含枚举)或者指向外部链接对象的指针。
那么就是说。浮点数是不行的。指向内部链接对象的指针是不行的。
template<typename T, int MAXSIZE> class Stack{ Private: T elems[MAXSIZE]; … }; Int main() { Stack<int, 20> int20Stack; Stack<int, 40> int40Stack; … };
posted on 2017-05-20 11:53 gavanwanggw 阅读(125) 评论(0) 编辑 收藏 举报