Dynamic_Cast C++

Dynamic Cast C



Rzutowanie dynamiczne w języku programowania C++ zostanie omówione w tym artykule. Aby rozpocząć, musimy zrozumieć pojęcie rzucania i wiele rodzajów rzucania. Proces zmiany typu danych zmiennej jest znany jako rzutowanie. Rzutowanie dzieli się w języku programowania C++ na dwie kategorie: rzutowanie niejawne i rzutowanie jawne.

Konwersja typu danych w C++:

Rzutowanie typów to procedura zmiany typu danych na inny typ danych. Istnieją dwa typy rzutowania lub konwersji typów w języku programowania C++: rzutowanie jawne i niejawne. Automatyczna konwersja typów to inna nazwa niejawnego rzutowania typów. Jest wykonywany przez kompilator podczas kompilacji w czasie rzeczywistym i nie wymaga żadnego wkładu ani działania użytkownika. Ta forma rzutowania występuje, gdy w wyrażeniu występują dwa rodzaje typów danych. Na przykład:

  Graficzny interfejs użytkownika, tekst, aplikacja Opis generowany automatycznie







W podanym kodzie widzimy, że w ostatnim wierszu wyrażenia wstawiana jest zmienna całkowita i zmienna znakowa, a wartość zmiennej całkowitej „i” jest zmieniana. Odpowiednik „a” w kodzie ASCII zostanie przekonwertowany na wartość znakową i dodany do wartości całkowitej zmiennej „i” w tej instrukcji. Jeśli zostanie wydrukowana wartość zmiennej „i”, wynikiem będzie suma obu tych wartości. Kompilator automatycznie przekształca typ danych zmiennej znakowej na typ danych typu integer, konwertując go na standardową wartość ASCII alfabetu po prawej stronie, co jest doskonałym przykładem niejawnej lub automatycznej konwersji typu w czasie wykonywania.



Teraz, jeśli chodzi o jawne rzutowanie lub konwersję typów, nie jest to proces zautomatyzowany; użytkownik musi ręcznie przekonwertować typ danych zmiennej na inny typ zmiennej w kodzie. Typy danych są zwykle ułożone w hierarchię w oparciu o ich miejsce w pamięci i ilość informacji, które mogą pomieścić. Tak więc, gdy typ danych niższego rzędu jest używany do przechowywania jakichkolwiek informacji, ale musi zostać przekształcony w typ danych wyższego rzędu, aby można było zminimalizować utratę informacji i przechowywać coraz więcej informacji, powszechnie stosuje się jawne rzutowanie lub konwersję typów. Gotowe. Na przykład, ponieważ zmienna typu całkowitego nie może przechowywać wartości po przecinku dziesiętnym, możemy utracić część informacji, jeśli nadal będziemy używać zmiennych całkowitych. Aby uniknąć tej straty, konwertujemy zmienną całkowitą na zmienną zmiennoprzecinkową, zapisując wartości po przecinku i zapobiegając utracie informacji. Jawna konwersja typu w języku programowania C++ może być przeprowadzona na jeden z dwóch sposobów: poprzez przypisanie lub użycie operatora rzutowania. Konwersja przypisania jest wykonywana w wyrażeniu kodu, a składnia tego wyrażenia jest przedstawiona poniżej.



# „(typ danych) wyrażenie”

W powyższym kodzie musimy umieścić poprawny typ danych w nawiasie, a po nawiasie wpisać zmienną lub wyrażenie, które chcemy zmodyfikować, do typu danych zapisanego w nawiasie.





Teraz przyjrzymy się rodzajowi konwersji wykonywanej przez operatory rzutowania w języku programowania C++. Operatory rzutowania są również nazywane operatorami jednoargumentowymi, które wymuszają zmianę typu danych zmiennej z jednego istniejącego na inny. Istnieją cztery typy operatorów rzutowania rzutowania: rzutowanie statyczne, rzutowanie dynamiczne, rzutowanie stałe i rzutowanie reinterpretowane.

Rzutowanie dynamiczne w C++:

Rzutowanie dynamiczne w języku programowania C++ opiera się na koncepcji RTTI (Run Time Type Identification). RTTI to funkcja obecna w kilku językach programowania, takich jak C/C++, Ada i Object Pascal. Run-Time Type Identification or Information to funkcja, która identyfikuje i wyodrębnia informacje dotyczące szczegółów typu danych obiektu w czasie wykonywania programu. Ta funkcja zapewnia bezpieczną ścieżkę dla metod rzutowania typu, takich jak funkcja „typeid” lub dynamiczne rzutowanie typu. Wykrywa informacje o typie danych w czasie wykonywania i pomaga w konwersji typu danych, gdy operatorzy są w grze.



Rzutowanie dynamiczne jest najczęściej wykorzystywane w C++ do bezpiecznego rzutowania w dół w czasie wykonywania. Aby pracować z rzutowaniem dynamicznym, klasa bazowa musi mieć 1 funkcję wirtualną. Rzutowanie dynamiczne działa tylko z polimorficznymi klasami bazowymi, ponieważ wykorzystuje te informacje do określenia bezpiecznego rzutowania w dół. Operator rzutowania dynamicznego wykonuje rzutowanie dynamiczne. Teraz, gdy znamy już pojęcia związane z rzucaniem dynamicznym, możemy przejść do części implementacyjnej. Przyjrzyjmy się najpierw składni używania rzutowania dynamicznego w języku programowania C++, która jest napisana poniżej:

# „dynamic_cast (Expression)”

W powyższym wyrażeniu pierwsza część opisuje nazwę operatora; w nawiasach kątowych wpisujemy nazwę typu danych, na który chcemy przekonwertować nasze wyrażenie, aw nawiasach okrągłych wpisujemy nazwę zmiennej lub obiektu, który chcemy przekonwertować.

Teraz, gdy wiemy, jak używać operatora rzutowania dynamicznego i wypełniać parametry konwersji typów danych zmiennych, możemy go użyć do konwersji typów danych zmiennych.

Korzystanie z metody dynamicznego rzutowania w systemie Ubuntu 20.04:

Aby wdrożyć tę koncepcję, musimy użyć kilku klas do pracy z konwertowaniem obiektów klasy przez dziedziczenie. Aby więc to zrobić najpierw, musimy najpierw wiedzieć, że plik programu C++ w środowisku Ubuntu jest przechowywany z rozszerzeniem „.cpp”, więc aby utworzyć ten plik na naszym pulpicie, otwórz terminal i wpisz „cd Desktop” na linii poleceń, a następnie naciśnij enter i wpisz „touch filename .cpp”, aby utworzyć plik z rozszerzeniem „.cpp”. Teraz napiszemy kod w tym pliku, aby utworzyć klasę bazową i 2 klasy pochodne, aw kodzie sterownika użyjemy operatora rzutowania dynamicznego.

  Graficzny interfejs użytkownika, tekst Opis generowany automatycznie

Wyjdź z pliku po kliknięciu przycisku Zapisz. Wróć do terminala i zbuduj plik za pomocą polecenia „g ++” z nazwą pliku i rozszerzeniem „.cpp”. Za pomocą tego polecenia zostanie utworzony plik z rozszerzeniem „.out”. Możesz teraz uruchomić ten plik, wpisując „./”, a następnie rozszerzenie „.out”.
  Opis tekstowy generowany automatycznie

W tym programie wskaźnik klasy bazowej przechowuje obiekty klasy pochodnej 1 (d1). Klasa bazowa dynamicznego rzutowania, wskaźnik zachowała obiekt Derived1 i przydzieliła go do klasy pochodnej 1, która zapewniła prawidłowe rzutowanie dynamiczne.

Wniosek :

Ten artykuł nauczył nas metody rzutowania typów używanej w języku programowania C++. Szczegółowo omówiono również rodzaj rzutowania, a także skupiliśmy się na potrzebie, dlaczego używamy takich metod w programowaniu w C++. Omówiliśmy funkcję wspomagającą, która pomaga w konwersji typu danych zmiennej poprzez pobieranie informacji i weryfikację poprawności konwersji, zwaną RTTI. Zaimplementowaliśmy również koncepcję dynamicznego rzutowania, używając operatora dynamicznego rzutowania w wyrażeniu w języku programowania C++ w środowisku Ubuntu 20.04.