Some say the use of dynamic_cast often means bad design and dynamic_cast can be replaced by virtual functions
dynamic_cast
When you use downcasting, dynamic_cast is good, because it restricts you to downcast to irrelevant type. Please refer this.