You are to use the classes in the file "taskstub.h" that I have made public. However you should derive your own classes from these classes, and work with your derived classes. In this way you may add more data members or member functions. For all of the pure virtual functions in "taskstub.h", you are to redefine them in your derived classes.
Your "topsort" function should still take an ostream argument passed by reference, and your constructor for the class derived from "taskset_stub" should take an istream argument passed by reference (its constructor should also invoke the constructor for the base class). Thus output (or input) may be sent to (or taken from) the screen (or keyboard) by passing the actual argument "cout" (or "cin"), if desired.
Assume that the input files use the same representation as in Assignment 1.
You may use as many files in your program (in addition to "taskstub.h") as you want.
You should be able to detect and handle the same 3 types of errors you were required to check in Assignment 1, and also be able to detect and report and empty file. Don't forget to test a nonexistent file.
You are to write and use an explicit destructor for any class that needs one.
You will be judged on
Any nonstandard libraries that you use should be turned in with your code. Of course it should be clear which code you have written and which you have not.