Polymorphism allows objects of different classes to respond differently to the same function call. It is an important feature of object-oriented programming that allows for a base class interface to be used for derived class objects. Polymorphism can be achieved through virtual functions. Early binding, also called static binding, is when the function call is resolved at compile time based on the type of the object. Late binding, or dynamic binding, is when the function call is resolved at runtime based on the actual type of the object. Pure virtual functions can only be declared in a base class and must be defined in derived classes, making the base class abstract.