1、模板 模板的定义:
template<class T> T 函数名(参数) { 函数体; }利用模板求两个数的最小值
#include<iostream> using namespace std; template<class T> T findmin(T a,T b) { T min; min=(a<b)?a:b; return min; } int main() { int x=findmin(10,20); double y=findmin(1.11,2.22); cout<<x<<" "<<y<<endl; } result: 10 1.11我们还需要考虑如果函数模板和一般函数重名时,该如何调用?
#include<iostream> using namespace std; template<class T> T test(T a,T b) { return a+b; } int test(int a,int b) { return a-b; } int main() { int x=test(10,20); double y=test(1.11,2.22); cout<<x<<" "<<y<<endl; } resule: -10 3.33根据上述程序和运行结果我们可以知道,当模板和一般函数重名时,首先调用一般函数,如果函数值的类型与一般函数不能匹配时,再调用函数模板。
2、类模板 类模板的定义:
template<class T> class 类名 { ... };利用类模板设计一个堆栈
#include<iostream> using namespace std; template<class T> class cstack { int ct; T data[100]; public: cstack() { ct=0; } void push(T x) { if(ct<100) data[ct++]=x; } T pop() { if(ct>0) return data[--ct]; else return 0; } void disp(); }; template<class T> void cstack<T>::disp() { for(int i=0;i<ct;i++) cout<<data[i]<<" "; } int main() { int a;double b; cstack <int>p; cstack <double>q; p.push(10); p.push(20); q.push(1.11); q.push(2.22); a=p.pop(); b=q.pop(); cout<<a<<" "<<b<<endl; p.disp(); q.disp(); } result: 20 2.22 10 1.11根据上述程序和运行结果我们可以看出类模板的使用方法,需要注意的几点: (1)成员函数外部定义时的书写格式
template<class T> 成员函数类型 类名<T>::成员函数 { 函数体; }(2)在定义对象的时候,要注意对象值的类型
例如: cstack <int>x; cstack <double>y;(3)虽然我们定义了模板,但是不同类型值并不是保存在同一个堆栈中,而是分别保存在各自的堆栈中。
