Stack.h //头文件
/*
***********************************************************************************
主题 :类模板演示
作者 :梁岳传
日期 :2008-4-4
***********************************************************************************
*/
#ifndef TSTACK_H
#define TSTACK_H
template<typename T>
class Stack
{
public:
Stack(int size = 10);
~Stack();
bool Push(const T&);
bool Pop(T &);
private:
int iSize;
int iTop;
T *stackPtr;
bool isEmpty()const;
bool isFull()const;
};
#endif
Stack.cpp //实现文件
#include"Stack.h"
template<typename T>
Stack<T>::Stack(int size)
{
iSize = size > 0 ? size : 10;
iTop = -1;
stackPtr = new T[iSize];
}
template<typename T>
Stack<T>::~Stack()
{
delete[] stackPtr;
}
template<typename T>
bool Stack<T>::isEmpty()const
{
return iTop == -1;
}
template<typename T>
bool Stack<T>::isFull()const
{
return iTop == iSize - 1;
}
template<typename T>
bool Stack<T>::Push(const T &pushValue)
{
if(isFull() == false)
{
stackPtr[++iTop] = pushValue;
return true;
}
return false;
}
template<typename T>
bool Stack<T>::Pop(T &popValue)
{
if(isEmpty() == false)
{
popValue = stackPtr[iTop--];
return true;
}
return false;
}
Main.cpp //主函数文件
#include<iostream>
#include "Stack.h"
#include "Stack.cpp"
using namespace std;
int main()
{
Stack<double> doubleStack(5);
double f = 1.1;
while(doubleStack.Push(f) == true)
{
cout<< f << ' ';
f += 1.1;
}
cout<<endl<<"Stack is full, can's push "<<f<<endl;
cout<<endl<<"Popping elements from doubleStack"<<endl;
while(doubleStack.Pop(f))
{
cout<<f<<' ';
}
cout<<endl;
Stack<int> intStack;
int i = 1;
cout<<endl<<"Push elements onto intStack"<<endl;
while(intStack.Push(i) == true)
{
cout<<i<<" ";
++i;
}
cout<<endl<<"Stack is full, can't push "<<i<<endl<<endl<<"Popping elements from intStack"<<endl;
while(intStack.Pop(i) == true)
{
cout<<i<<" ";
}
cout<<endl<<"Stack is empty, can't pop"<<endl;
return 0;
}