模板类以这样的代码开头:template
template
class看作是变量的类型名,该变量接受类型作为其值,把Type看作是该变量的名称。
将模板信息放在一个头文件中,建立stacktp.h
#ifndef STACKTP_H_ #define STACKTP_H_ // 建立模板 template<class Type> class Stack { private: enum {MAX=10}; Type items[MAX]; int top; public: Stack(); bool isempty(); bool isfull(); bool push(const Type & item); bool pop(Type & item); }; template<class Type> Stack<Type>::Stack() { top=10; } template<class Type> bool Stack<Type>::isempty() { return top==0; } template<class Type> bool Stack<Type>::isfull() { return top==MAX; } template<class Type> bool Stack<Type>::push(const Type &item) { if(top<MAX) { items[top++]=item; return true; } else return false; } template<class Type> bool Stack<Type>::pop(Type & item) { if(top>0) { item=items[--top]; return true; } else return false; } #endif
相关推荐:《常见问题》
建立源文件stacktem.cpp;
#include<iostream> #include<string> #include<cctype> #include"stacktp.h" using namespace std; int main() { Stack<string> st;// 创建一个空的stack,和前面的模板联系起来 char ch; string po; cout<<"Please enter A to add a purchase order.\n" <<"P to precess a PO,or Q to quit."<<endl; while(cin>>ch && toupper(ch)!='Q' ) { while(cin.get()!='\n') { continue; } if(!isalpha(ch)) { cout<<'\a'; continue; } switch(ch) { case 'A': case 'a':cout<<"Enter a PO number to add:"<<endl; cin>>po; if(st.isfull()) { cout<<"stack already full"<<endl; } else { st.push(po); } break; case 'P': case 'p': if(st.isempty()) { cout<<"stack already empty"<<endl; } else { st.pop(po); cout<<"PO #"<<po<<" popped\n"; break; } } cout<<"Please enter A to add a purchase order,\n" <<"P to process a PO,or Q to quit.\n"; } cout<<"Bye!"<<endl; return 0; }
以上是template