Dynamic_Cast C++

Dynamic Cast C



Distribuția dinamică în limbajul de programare C++ va fi discutată în acest articol. Pentru început, trebuie să înțelegem noțiunea de turnare și multe tipuri de turnare. Procesul de modificare a tipului de date al unei variabile este cunoscut sub numele de turnare. Castingul este împărțit în două categorii în limbajul de programare C++: casting implicit și casting explicit.

Conversie tip de date în C++:

Castingul tipului este procedura de modificare a tipului de date la un alt tip de date. Există două tipuri de casting sau conversie de tip în limbajul de programare C++: casting implicit și explicit. Conversia automată a tipurilor este un alt nume pentru tipărirea implicită. Este realizat de compilator în timpul compilării în timp real și nu necesită nicio intrare sau acțiune de utilizator. Când există două tipuri de date într-o expresie, apare această formă de turnare. De exemplu:

  Interfață grafică cu utilizatorul, text, aplicație Descriere generată automat







În codul dat, putem vedea că o variabilă întreagă și o variabilă caracter sunt inserate în ultima linie de expresie, iar valoarea variabilei întregi „i” este modificată. Echivalentul numărului ASCII al lui „a” va fi convertit într-o valoare de caracter și adăugat la valoarea întreagă a variabilei „i” în această declarație. Dacă se imprimă valoarea variabilei „i”, rezultatul va fi un total al ambelor valori. Compilatorul transformă automat tipul de date al variabilei caracter într-un tip de date întreg, transformându-l în valoarea standard ASCII a alfabetului din dreapta, care este un exemplu grozav de conversie implicită sau automată a tipului în timpul de rulare.



Acum, când vine vorba de turnarea explicită de tip sau de conversie de tip, nu este un proces automat; utilizatorul trebuie să convertească manual un tip de date al unei variabile într-un alt tip de variabilă din cod. Tipurile de date sunt de obicei aranjate într-o ierarhie pe baza spațiului lor de memorie și a cantității de informații pe care o pot deține. Deci, atunci când un tip de date de ordin inferior este utilizat pentru a stoca orice informație, dar trebuie transformat într-un tip de date de ordin mai înalt, astfel încât pierderea de informații să poată fi minimizată și să poată fi stocate din ce în ce mai multe informații, în mod obișnuit, turnarea explicită a tipului sau conversia tipului este Terminat. De exemplu, deoarece o variabilă de tip întreg nu poate stoca valori după virgulă zecimală, putem pierde unele informații dacă continuăm să folosim variabile întregi. Pentru a evita această pierdere, convertim variabila întreagă într-o variabilă float, salvând valori după zecimale și prevenind pierderea de informații. Conversia explicită a tipului în limbajul de programare C++ poate fi realizată într-unul din două moduri: prin atribuire sau prin utilizarea operatorului cast. Conversia atribuirii se face într-o expresie de cod, iar sintaxa pentru această expresie este furnizată mai jos.



# „expresie (tip de date)”

În codul de mai sus, trebuie să punem un tip de date valid în paranteză, iar după paranteză, trebuie să scriem variabila sau expresia pe care dorim să o modificăm în tipul de date scris în paranteză.





Acum vom analiza tipul de conversie realizat de operatorii de distribuție în limbajul de programare C++. Operatorii de distribuție sunt numiți și operatori unari care forțează o variabilă să-și schimbe tipul de date de la unul existent la altul. Există patru tipuri de operatori de distribuție: Distribuție statică, Distribuție dinamică, Distribuție constantă și Reinterpretare distribuție.

Turnare dinamică în C++:

Turnarea dinamică în limbajul de programare C++ se bazează pe un concept numit RTTI (Run Time Type Identification). RTTI este o funcție prezentă în mai multe limbaje de programare precum C/C++, Ada și Object Pascal. Identificarea tipului sau informațiile în timp de rulare este o funcție care identifică și extrage informațiile referitoare la detaliile tipului de date al unui obiect în timpul de rulare al unui program. Această funcție oferă o cale sigură pentru metodele de tip casting, cum ar fi funcția „typeid” sau tipul dinamic. Detectează informațiile despre tipul de date pe durata de rulare și ajută la conversia tipului de date atunci când operatorii sunt în joc.



Turnarea dinamică este utilizată în cea mai mare parte în C++ pentru difuzarea în jos sigură în timpul rulării. Pentru a lucra cu distribuția dinamică, clasa de bază trebuie să aibă 1 funcție virtuală. Dynamic cast funcționează numai cu clase de bază polimorfe, deoarece utilizează aceste informații pentru a determina downcasting sigur. Un operator de turnare dinamică face turnarea dinamică. Acum că știm despre conceptele legate de turnarea dinamică, putem merge spre partea de implementare. Să ne uităm mai întâi la sintaxa pentru utilizarea turnării dinamice în limbajul de programare C++, care este scrisă mai jos:

# „dynamic_cast (Expresie)”

În expresia de mai sus, prima parte descrie numele operatorului; în parantezele unghiulare, scriem numele tipului de date în care trebuie să ne transformăm expresia, iar în parantezele rotunde, scriem numele variabilei sau al obiectului pe care dorim să-l convertim.

Acum că știm cum să folosim operatorul de distribuție dinamică și să completăm parametrii pentru conversia tipurilor de date ale variabilelor, îl putem folosi pentru a converti tipurile de date ale variabilelor.

Folosind metoda Dynamic Cast în Ubuntu 20.04:

Pentru a implementa acest concept, trebuie să folosim mai multe clase cu care să lucrăm pentru a converti obiectele clasei prin moștenire. Deci, pentru a face asta mai întâi, trebuie să știm mai întâi că fișierul de program C++ din mediul Ubuntu este stocat cu extensia „.cpp”, așa că pentru a crea acest fișier pe desktop, deschideți un terminal și tastați „cd Desktop” pe linia de comandă, apoi apăsați Enter și tastați „touch filename .cpp” pentru a crea un fișier cu extensia „.cpp”. Acum vom scrie un cod în acel fișier pentru a crea o clasă de bază și 2 clase derivate, iar în codul driverului, vom folosi operatorul de distribuție dinamică.

  Interfață grafică cu utilizatorul, text Descriere generată automat

Ieșiți din fișier după ce faceți clic pe butonul de salvare. Reveniți la terminal și construiți fișierul folosind comanda „g++” cu numele fișierului și extensia „.cpp”. Un fișier cu extensia „.out” va fi creat folosind această comandă. Acum puteți rula acel fișier introducând „./” urmat de extensia „.out”.
  Descriere text generată automat

În acest program, pointerul clasei de bază stochează obiecte derivate din clasa 1 (d1). Clasa de bază de turnare dinamică, pointerul a reținut obiectul Derived1 și l-a alocat clasei derivate 1, care a furnizat o turnare dinamică validă.

Concluzie :

Acest articol ne-a învățat metoda de tip casting folosită în limbajul de programare C++. Tipul de casting a fost, de asemenea, discutat în detaliu și ne-am concentrat pe necesitatea de ce folosim astfel de metode în programarea C++. Am discutat despre funcția de asistență care ajută la conversia tipului de date al variabilei prin preluarea informațiilor și verificarea conversiei corecte numită RTTI. De asemenea, am implementat conceptul de turnare dinamică utilizând operatorul de turnare dinamică într-o expresie în limbajul de programare C++ în mediul Ubuntu 20.04.