Learned a thing or two about virtual methods, inheritance and
shared_ptrs!

-Protip: Use virtual methods more often
-Don't forget to handle vectors(*) or else memory leaks
-Consider using shared_ptr or unique_ptr from std (memory)