Version 2 - Using abstract class/ No function pointers..