Proměnnou typu ukazatel na základní třídu nemůžeme přiřadit do proměnné typu ukazatel na odvozenou třídu.
Basic * b = new Basic; Component * v = b;
Je zřejmé, že objekt typu Basic nemá proměnnou z a metodu move, a proto nelze přiřadit v = b;
Pokud v proměnné typu Basic* byl uložen objekt typu Component, potom by bylo možné objekt uložit do proměné typu Component*.
Ovšem překladač nám stejně přiřazení nedovolí. Z hlediska překladače je přířazení ukazatele na Basic do ukazatele na Component potenciálně nebezpečné.
Item * c = new Component;
Basic * u = c;
Component * v = u; /* překladač ohlásí chybu */
Konstrukce dynamic_cast umožňuje přetypování ukazatele na základní třídu na ukazatel na odvozenou třídu
Basic * u; Component * v = dynamic_cast < Component * > (u);
Pokud parametr v kulatých závorkách za běhu programu nebude skutečně typu uvedeného v < > závorkách, bude výsledkem nullptr
Příklad použití dynamic_cast uvidíme v následujícím přikladu s Open Inventorem