Add virtual destructor for base classes

This gets rid of GCC -weffc++ warnings.
Use override instead of virtual

C++11's new way of declaring virtual methods that override base class
method is to use override.