C++中模板template和类class的结合使用
2018-10-12 本文已影响0人
hades2013
模板类以这样的代码开头:template<class Type>
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;
}
调试代码