Sdílet prostřednictvím


Přetypování

Jazyk C++ udává, že je-li třída odvozena ze základní třídy obsahující virtuální funkce, lze ukazatel na typ této základní třídy použít k volání implementací virtuálních funkcí umístěných v objektu odvozené třídy.Třída obsahující virtuální funkce je někdy označována jako "polymorfní třída."

Jelikož odvozená třída obsahuje všechny definice všech základních tříd, z nichž byla odvozena, lze ukazatel přetypovat na libovolnou z těchto tříd vyskytujících se výše v jejich hierarchii.Je-li dán ukazatel na základní třídu, může být bezpečné přetypovat ukazatel na třídu umístěnou v hierarchii níže.Přetypování je bezpečné, pokud objekt, na který ukazatel ukazuje, je ve skutečnosti typem odvozeným ze základní třídy.V takovém případě se je skutečný objekt nazývám "kompletním objektem." O ukazateli na základní třídu se říká, že ukazuje na "podobjekt" kompletního objektu.Považte například hierarchii tříd znázorněnou na následujícím obrázku.

Hierarchie tříd

Hierarchie třídy

Objekt typu C lze vizualizovat tak, jak ukazuje následující obrázek.

Třída C s podobjekty B a A

Třída C s dílčí objekty B a A

Je-li dána instance třídy C, existuje podobjekt B a podobjekt A.Instance třídy C, včetně podobjektů A a B, je "kompletním objektem."

Pomocí informací o typu za běhu lze zkontrolovat, zda ukazatel skutečně ukazuje na kompletní objekt a lze jej bezpečně přetypovat tak, aby ukazoval na jiný objekt ve své hierarchii.Tyto druhy přetypování lze provést pomocí operátoru dynamic_cast.Operátor provádí za běhu také kontroly potřebné k zajištění bezpečnosti operace.

Pro převod nepolymorfních typů lze použít operátor static_cast (toto téma vysvětluje rozdíl mezi statickými a dynamickými převody typů a kdy je vhodné je použít).

Tato část zahrnuje následující témata:

Viz také

Referenční dokumentace

Výrazy (C++)