exit(1) error checking with exceptions.
You are given an IntStack class that has plenty of error checking in it. However, whenever
you do something it doesn't like, it exits the program.
This is bad because you don't want IntStack to handle the problem... YOU want to handle the problem.
The general rule is that only main should decide if the program should exit... nowhere else. If main can't handle the problem, nobody can. For example, if the stack is empty when we pop, main may know a way to handle it and can avoid exiting.
The only file you need for this lab is exceptions.cpp. This file contains the main and the IntStack Class.
The IntStack class works in the following way:
When constructed, it allocates a vector to have a certain size. This size will not change and limits the amount of items that can go in the stack.
IntStack also has two functions that are usually included with stacks: push and pop.
Push adds an item to the stack; this can error if the stack
doesn't have any more room. Pop removes the most recently added item; this can error if the stack is empty. The stack keeps track of the top
with an unsigned int called cur_index. This number stores the index that will be pushed onto next. For example,
if cur_index is 0, the stack is empty and the next pushed item will be placed in index 0 of the vector.
Main works in the following way:
There are three tests that specifically trigger each error case.
The constructor errors when a negative size is passed in. Write a InvalideSize class to represent this error at the top of the exceptions.cpp
file. This exception should take a string in its constructor and have a GetMessage() accessor for this string. throw this exception with an
error message passed to the exception's constructor,
instead of printing an error message and doing exit(1). Write the code in main to catch the exception and use cerr
to print out what GetMessage() says.
Push errors when the stack is full. Write a StackFull class to represent this error at the top of the exceptions.cpp
file. This exception should take a string in its constructor and have a GetMessage() accessor for this string. throw this exception with an
error message passed to the exception's constructor,
instead of printing an error message and doing exit(1). Write the code in main to catch the exception and use cerr
to print out what GetMessage() says.
Pop errors when the stack is empty. Write a StackEmpty class to represent this error at the top of the exceptions.cpp
file. This exception should take a string in its constructor and have a GetMessage() accessor for this string. throw this exception with an
error message passed to the exception's constructor,
instead of printing an error message and doing exit(1). Write the code in main to catch the exception and use cerr
to print out what GetMessage() says.
Compile the program. Run it. If you did everything correctly, the program should run and should say "Completed!"
(2 Points) Template IntStack so that it can have any data type,
not just int. Don't worry that the old name is misleading.
(2 Points) Change your exceptions so that all three of them derive off of a StackException class. The shared code
should be in StackException.