Udostępnij za pośrednictwem


Rzutowanie

Język C++ zapewnia, że jeśli klasa dziedziczy po klasie podstawowej, zawierającej funkcje wirtualne, wskaźnik do tej klasy podstawowej może służyć do implementacji funkcji wirtualnych znajdujących się w obiekcie klasie pochodnej.Klasa zawierająca funkcje wirtualne jest czasami nazywana "klasą polimorficzną".

Ponieważ klasa pochodna zawiera definicje wszystkich podstawowych klas, po której dziedziczy, jest bezpieczne rzutowanie wskaźnika w górę hierarchi na jedną z tych klas podstawowych.Podając wskaźnik do klasy podstawowej, może być bezpiecznie rzutowanie wskaźnika w dół hierarchii.Jest to bezpieczne, jeśli wskazywany obiekt, jest rzeczywiście typu dziedziczącym po klasie bazowej.W tym przypadku faktyczny obiekt jest określany jako "obiekt kompletny". Wskaźnik na klasę bazową jest nazywany wskaźnikiem na "pod obiekt" obiektu kompletnego.Dla przykładu rozważmy hierarchię klas pokazaną na poniższym rysunku.

Hierarchia klas

Hierarchia klas

Obiekt typu C może zostać zwizualizowany, jak pokazano na poniższym rysunku.

Klasa C z pod obiektami A i B

Klasa C z obiektów podrzędnych B i A

Biorąc pod uwagę wystąpienie klasy C, istnieje pod obiekt B i pod obiekt A.Wystąpienie klasy C, oraz pod obiekty A i B to "obiekt kompletny".

Korzystając z informacji o typie uzyskiwanej w czasie wykonywania, możliwe jest sprawdzenie, czy wskaźnik faktycznie wskazuje na obiekt kompletny i może być bezpiecznie rzutowany na wskaźnik na inny obiekt w jego hierarchii.Operator dynamic_cast może służyć do takiego właśnie rzutowania.Wykonuje także niezbędne sprawdzenie w czasie wykonania w celu bezpiecznego wykonania operacji.

W przypadku konwersji niepolimorficznych typów, można użyć operatora static_cast (w tym temacie wyjaśniono różnicę między rzutowaniami statycznymi a dynamicznymi i kiedy należy używać każdego).

W tej sekcji omówiono następujące tematy:

Zobacz też

Informacje

Wyrażenia (C++)