Aim: To implement a program to handle stack overflow, underflow and odd number exception using Exception Handling.
Code:
#include
#include
#include
#define MAX 3
class stack
{
public:
class full;
class empty;
class oddinput;
private:
int stk[MAX];
int top;
public:
stack()
{
top=-1;
}
void push(int item)
{
if(item%2!=0)
{
char o[40]="Odd Input!";
int n=item;
throw oddinput(o,n);
}
if(top>=MAX-1)
{
char o[40]="Stack Overflow!";
int n=item;
throw full(o,n);
}
stk[top]=item;
top++;
}
int pop()
{
if(top<0)
{
char o[40]="Stack Empty!";
int n=top;
throw empty(o,n);
}
int i=stk[top];
top--;
return i;
}
class full
{
public:
char f_origin[40];
int f_val;
full(char o[40], int v)
{
strcpy(f_origin,o);
f_val=v;
}
};
class empty
{
public:
char e_origin[40];
int e_val;
empty(char o[40], int v)
{
strcpy(e_origin,o);
e_val=v;
}
};
class oddinput
{
public:
char o_origin[40];
int o_val;
oddinput(char o[40],int v)
{
strcpy(o_origin,o);
o_val=v;
}
};
};
void main()
{
stack s1;
int i;
try
{
s1.push(8);
cout<<"\nAdded 8";
s1.push(14);
cout<<"\nAdded 14";
s1.push(5);
cout<<"\nAdded 5"; //This will not print
i=s1.pop();
cout<<"\nElement popped: "<
i=s1.pop();
cout<<"\nElement popped: "<
i=s1.pop();
cout<<"\nElement popped: "<
i=s1.pop();
cout<<"\nElement popped: "<
i=s1.pop();
cout<<"\nElement popped: "<
}
catch(stack::oddinput oi)
{
cout<<"\nException: "<
}
catch(stack::full f)
{
cout<<"\nException: "<
}
catch(stack::empty e)
{
cout<<"\nException: "<
}
}
Output:
Exception: Odd Input class
Added 8
Added 14
Exception: Odd Input!
Input was: 5Press any key to continue
Exception: Full class
Added 8
Added 8
Added 8
Exception: Stack Overflow!
Input was: 14Press any key to continue
Exception : Empty class
Added 8
Added 8
Added 14
Element popped: 14
Element popped: 8
Element popped: 8
Exception: Stack Empty!
Input was: -1Press any key to continue