// Provide abstract class for users of the class to interface with the list with
class LList {
public:
// VIRTUAL FUNCTIONS
// Find the length of this list
virtual int length()=0; //=0 makes the class abstract
// Get the list stored in the next position of the list
virtual LList* getNext()=0;
// Get the value stored at this position of the list
int virtual getVal()=0;
// Deconstruct the List (Virtual allows subclass Deconstructors to be called)
virtual ~LList();
// STATIC FUNCTIONS
//Factory method for the empty list
static LList* make();
//Cleans up after the list is finished: Deletes memory allocated for entire list
static void clean(LList* list);
// Produce a LList with the given value added to the given list
static LList* Cons(int value, LList* rest);
};