Static vs Dynamic Polymorphism in C++ Explained