Polymorphism tillämpas när du använder dig av en pekare av basklasstyp för att peka på något objekt som ärver från basklassen. T.ex. om du har basklassen Animal så kan du skapa subklassen Kanin som ärver från Animal. Eftersom att Kanin är en subklass och Animal är en basklass är det möjligt att använda sig av en pekare av basklasstypen (Animal) för att peka på ett subklass-objekt (Kanin).
Den dynamiska bindningen kommer alltså in, som ovanstående skriver, när man vill komma åt specifika funktioner men även överskuggade funktioner som finns hos subklassen. Som inte är definierade som virtual i basklassen. Har man då alltså en Animal-pekare och ett Kanin-objekt, och försöker kalla på funktioner så kommer du endast åt de funktioner som finns hos basklassen (Animal). Vilket gör att även om man har överskuggat en funktion hos Kanin som ärvdes från Animal som kommer den grundform som finns i Animal köras, trots att det är ett Kanin-objekt.
För att förhindra det här, använder mig sig alltså av dynamisk bindning och byter pekartyp under programkörning. I C++ använder man då dynamic_cast som tillfälligt kastar objektet till en pekare av samma typ. Vilket gör det möjligt att använda subklassens egna funktioner.