模板功能提供了在函数和类中将类型作为参数的能力,让通用的模板函数或者模板类成为现实。模板函数或者模板类声明如下:
template<typename T>-------------模板前缀;T为类型参数,可以是常见任何类型
模板函数定义如下:
template<typename T>
返回类型 函数名(T 参数....){
operations...(可以定义T类型变量)
}
模板类声明:
template<typename T>
class 类名{
返回类型 函数名(T 参数....)};
模板类声明后,分开,进行类定义:
template<typename>
返回类型 类名<T>::函数名(
T 参数....){
operations...(可以定义T类型变量)
}
比如定义一个T类型的模板类stack,可以是int,double,string:
#ifndef A
#define A
template<typename T>
class stack{
private:
T ele[100];
int size;
public:
stack(){size=0;}
bool empty();
T peek();
void push(T x);
T pop();
int getsize(){return size;}};//类声明
template<typename T>
bool stack<T>::empty(){if(size==0) return true;
else return false;}
template<typename T>
T stack<T>::peek(){if(empty()) throw runtime_error("empty");
else return ele[size-1];}
template<typename T>
void stack<T>::push(T x){ele[size++]=x;}
template<typename T>
T stack<T>::pop(){if(empty()) throw runtime_error("empty");
else return ele[--size];}//类定义
#endif
主函数调用:
#include"15.h"
template<typename T>
void prt(stack<T> &ee){
while(!ee.empty()){
try{
cout<<ints.pop()<<" ";}
catch(exception&e){cout<<e.what()<<endl;}
}
cout<<endl;}//模板函数
int main(){
stack<int> ints;
for(int i=0;i<10;i++)
ints.push(i);
prt(ints);
stack<string> ss;
ss.push("\"beijing\"");
ss.push("\"shanghai\"");
ss.push("\"nanjing\"");
prt(ss);
system("pause");
return 0;}