#include <iostream>
using std::cout;
using std::endl;
#define SIZE 10
template <class T> class stack {
private:
T *parr;
int index;
public:
stack(void);
~stack(void);
void push(T i);
void pop(void);
void print(void);
};
template <class T> stack<T>::stack()
{
index = 0;
cout << "Stack Constructor" << endl;
parr = new T[SIZE];
}
template <class T> stack<T>::~stack()
{
cout << "Stack Destructor" << endl;
delete[] parr;
}
template <class T> void stack<T>::push(T value)
{
if (index == SIZE)
{
cout << "Stack is full" << endl;
return;
}
parr[index++] = value;
}
template <class T> void stack<T>::pop(void)
{
if (index == 0)
{
cout << "Stack is empty" << endl;
return;
}
parr[--index];
}
template <class T> void stack<T>::print(void)
{
for (int i = 0; i < index; i++)
cout << parr[i] << ' ';
cout << endl;
}
int main()
{
stack<int> iobj;
iobj.push(1);
iobj.push(2);
iobj.push(3);
iobj.print();
iobj.pop();
iobj.pop();
iobj.print();
stack<double> dobj;
dobj.push(3.14);
dobj.push(17.81);
dobj.print();
dobj.pop();
dobj.print();
stack<char> cobj;
for (int i = 0; i < 4; i++)
cobj.push((char) 'A' + i);
cobj.print();
cobj.pop();
cobj.pop();
cobj.print();
return 0;
}
/*
run:
Stack Constructor
1 2 3
1
Stack Constructor
3.14 17.81
3.14
Stack Constructor
A B C D
A B
Stack Destructor
Stack Destructor
Stack Destructor
*/