Přetypování dynamic_cast

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
 
uop/dynamic.txt · Last modified: 2020/11/13 13:09 by 88.103.111.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki