The main concept of this assignment is exception classes and how they are used handling certain runtime errors.
I have provided a group of related account classes and a test program to help you focus on just exceptions and exception handling. You will write one small exception class that will be used to modify the account classes so that certain functions might throw an exception of this type. These functions will perform some test, which if true will throw an exception these functions will not handle the exception, only test for and possibly throw an exception.
In the main program (driver function), you will modify what you see to try and catch the exceptions. The statements that should cause an exception error are commented, so you can test your exceptions by removing the comments one-by-one. Remember that once an exception is thrown the remaining try block is skipped, so you should test each statement individually. All that is required in an exception handler block for this assignment is to print a message that an exception was caught.
The exception class you will write, with at least a 0-arg constructor, is as follows:
The account class functions that you will modify are as follows:
CheckingAccount: modify inherited functions as necessary
SavingsAccount: modify inherited functions as necessary
TimeDepositAccount: modify inherited functions as necessary
Write the exception class as described; the exception class must be in its own separate .h and .cpp files.
Modify the account classes as described. (You will need to use an #include directive in the BankAccount base class in order to throw excpetions.)
Modify the test program to try-catch this type of exception with some error conditions. (You may need to use an #include directive also in the AccountTest.cpp program file in order to catch and handle exceptions.)
In addition to the required 0-argument constructor, include and demonstrate a 1-argument constructor in your exception class to report the overdrawn amount with an AccountOverdrawnException. If an account member function detects an attempt to withdraw or transfer an amount that would leave a negative balance then do not allow that to happen; instead throw the exception passing it the difference between the argument amount and balance. The exception handler should retrieve that value from the exception object and include the amount in the message. (Note: the exception class itself should not print messages; it will require a private data member and a public observer function.)
Demonstrate that in some cases, only the base class functions need to test for and throw an exception.
Add another exception class called InvalidAmountException. This exception should be used with any constructor or function that takes an amount value as an argument and which should be thrown when the amount argument is negative. The exception handler should include that amount in its error message. (Note: the exception class itself should not print messages; it will require a private data member and a public observer function.)