C++学习笔记--模板

来源:互联网 发布:天龙八部男生发色数据 编辑:程序博客网 时间:2024/05/17 20:28

// stacktp.h -- a stack template

#ifndef STACKTP_H_#define STACKTP_H_template <class Type>class Stack{private:enum {MAX = 10};Type items[MAX];int top;// index for top stack itempublic:Stack();bool isempty();bool isfull();bool push(const Type & item);bool pop(Type & item);};template <class Type>Stack<Type>::Stack(){top = 0;}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;}elsereturn false;}template <class Type>bool Stack<Type>::pop(Type & item){if (top > 0){item = items[--top];return true;}elsereturn false;}#endif
// stacktem.cpp -- testing teh template stack class

#include <iostream>#include <string>#include <cctype>#include "stacktp.h"using namespace std;int main(){Stack<string> st;char ch;string po;cout << "Please enter A to add a purchase order,\n"<< "P to process a PO, or Q to quit.\n";while (cin >> ch && toupper(ch) != 'Q'){while (cin.get() != '\n')continue;if (!isalpha(ch))continue;switch (ch){case 'A':case 'a':cout << "Enter a PO number to add: ";cin >> po;if (st.isfull())cout << "stack already full\n";elsest.push(po);break;case 'P':case 'p':if (st.isempty())cout << "stack already empty\n";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\n";return 0;}

输出:

wang@wang:~/c++$ ./a.out
Please enter A to add a purchase order,
P to process a PO, or Q to quit.
A  
Enter a PO number to add: red911porsche
Please enter A to add a purchase order,
P to process a PO, or Q to quit.
P
PO #red911porsche popped
Please enter A to add a purchase order,
P to process a PO, or Q to quit.
P
stack already empty
Please enter A to add a purchase order,
P to process a PO, or Q to quit.
Q
Bye

0 0
原创粉丝点击