模板来设计模板函数和模板类

来源:互联网 发布:古剑奇谭网络版 知乎 编辑:程序博客网 时间:2024/06/16 14:55

模板功能提供了在函数和类中将类型作为参数的能力,让通用的模板函数或者模板类成为现实。模板函数或者模板类声明如下:

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 Atemplate<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;}

0 0