Simple implementation of Stack with exception handling in C++ using templates
#include<iostream.h>
template <class T>
class StackItem {
T item;
public:
StackItem<T> *next;
T GetItem() { return item; }
StackItem(T data) {
this->item = data;
}
};
template <class T>
class Stack {
StackItem<T> *top;
public:
Stack() {
this->top = NULL;
}
void Push(T data) {
StackItem<T> *it = new StackItem<T>(data);
if(top == NULL) {
top = it;
top->next = NULL;
} else {
it->next = top;
top = it;
}
}
T Pop() {
if(top == NULL) {
throw "Stack is empty !!!";
} else {
StackItem<T> *it = top;
top = it->next;
return it->GetItem();
}
}
};
int main (int argc, char* argv) {
Stack<int> stack;
// Add some items
for(int i = 0; i<6; i++) {
stack.Push(i);
cout << "Stack loaded with new value: " << i << endl;
}
// Print output with some indexes out of range
for(int i = 0; i<7; i++) {
try {
int value = stack.Pop();
cout << "Value removed from stack: " << value << endl;
} catch (const char* err_msg) {
cout << err_msg << endl;
}
}
}