模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
//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(void) { int n1=2,n2=10; double d1=1.5,d2=5.6; cout<< "较小整数:"<<min(n1,n2)<<endl<<endl; cout<< "较小实数:"<<min(d1,d2)<<endl<<endl; system("PAUSE"); }
// ClassTemplate.h #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<<endl; } #endif
// main.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"); }
#include <iostream> using namespace std; template<typename T,int MAXSIZE> class Stack { public: Stack(); void show(); private: T elems[MAXSIZE]; }; template<typename T,int MAXSIZE> Stack<T,MAXSIZE>::Stack() { int i; for(i=0;i<MAXSIZE;i++) { elems[i]=i; } } template<typename T,int MAXSIZE> void Stack<T,MAXSIZE>::show() { int i; for(i=0;i<MAXSIZE;i++) { cout<<elems[i]<<' '; } cout<<endl; } int main(void) { Stack<int,5> int5Stack; int5Stack.show(); system("pause"); return 0; }