Right so let's try to summarize what we've learned about the Template Method Design Patterns so we saw
that you can generally define an algorithm at a higher level in some sort of base class and you can
define the constituent parts of that skeleton algorithm as abstract members are really pure virtual
functions that you can subsequently override.
And the idea is then that you inherit from this algorithm class and you provide the necessary overrides
for the whole thing to actually work.