Dynamic_Cast C++

Dynamic Cast C



Ebben a cikkben a C++ programozási nyelv dinamikus öntését tárgyaljuk. Először is meg kell értenünk az öntés fogalmát és az öntés számos típusát. A változó adattípusának megváltoztatásának folyamatát castingnak nevezik. Az öntvény a C++ programozási nyelvben két kategóriába sorolható: implicit casting és explicit casting.

Adattípus átalakítás C++ nyelven:

A típusöntés az adattípus más adattípusra való módosításának eljárása. A C++ programozási nyelvben kétféle öntés vagy típuskonverzió létezik: implicit és explicit öntés. Az automatikus típuskonverzió az implicit típusadás másik neve. A fordító hajtja végre a valós idejű fordítás során, és nem igényel felhasználói beavatkozást vagy műveletet. Ha egy kifejezésben kétféle adattípus van, akkor ez az öntési forma fordul elő. Például:

  Grafikus felhasználói felület, szöveg, alkalmazás Leírás automatikusan generálva







Az adott kódban azt láthatjuk, hogy az utolsó soros kifejezésbe beszúrunk egy egész szám változót és egy karakteres változót, és megváltozik az „i” egész változó értéke. Az „a” ASCII-szám megfelelőjét karakteres értékké alakítjuk, és hozzáadjuk az „i” változó egész értékéhez ebben az utasításban. Ha az „i” változó értékét kinyomtatjuk, az eredmény mindkét érték összesen lesz. A fordító automatikusan egész adattípussá alakítja át a karakterváltozó adattípusát a jobb oldali ábécé ASCII szabványos értékére konvertálva, ami remek példa az implicit vagy automatizált típuskonverzióra a futási időben.



Ami az explicit típusöntést vagy típusátalakítást illeti, ez nem egy automatizált folyamat; a felhasználónak kézzel kell konvertálnia egy változó adattípusát egy másik típusú változóvá a kódban. Az adattípusok általában a memóriaterületük és a tárolható információ mennyisége alapján hierarchiába rendeződnek. Tehát amikor egy alacsonyabb rendű adattípust használnak bármilyen információ tárolására, de magasabb rendű adattípusokká kell átalakítani, hogy az információveszteséget minimálisra lehessen csökkenteni, és egyre több információ tárolható legyen, az explicit típusöntés vagy típuskonverzió általában Kész. Például, mivel egy egész típusú változó nem tud tizedesvessző utáni értékeket tárolni, elveszíthetünk bizonyos információkat, ha továbbra is egész számú változókat használunk. A veszteség elkerülése érdekében az egész változót lebegőváltozóvá alakítjuk, tizedesvessző után mentve az értékeket, és megakadályozva az információvesztést. Az explicit típuskonverzió a C++ programozási nyelvben kétféleképpen valósítható meg: hozzárendeléssel vagy a cast operátor használatával. A hozzárendelés átalakítása kódkifejezésben történik, és a kifejezés szintaxisa alább található.



# „(adattípus) kifejezés”

A fenti kódban egy érvényes adattípust kell zárójelbe tenni, a zárójel után pedig azt a változót vagy kifejezést, amelyet módosítani szeretnénk, a zárójelbe írt adattípusba.





Most megvizsgáljuk, hogy a cast operátorok milyen típusú átalakítást végeznek a C++ programozási nyelven. A Cast operátorokat unáris operátoroknak is nevezik, amelyek arra kényszerítenek egy változót, hogy az egyik meglévő adattípust a másikra változtassa. Négyféle casting operátor létezik: Static cast, Dynamic cast, Const cast és Re-interpret cast.

Dinamikus öntés C++ nyelven:

A dinamikus öntés a C++ programozási nyelvben az RTTI (Run Time Type Identification) elnevezésen alapul. Az RTTI egy olyan funkció, amely számos programozási nyelvben jelen van, mint például a C/C++, az Ada és az Object Pascal. A futásidejű típusazonosító vagy információ egy olyan funkció, amely azonosítja és kivonja az objektum adattípusának részleteit a program futási idejében. Ez a funkció biztonságos utat biztosít a típusöntési módszerekhez, például a „typeid” funkcióhoz vagy a dinamikus típusöntéshez. Érzékeli az adattípus-információkat a futási időben, és segít az adattípusok átalakításában, amikor az operátorok játékban vannak.



A dinamikus öntést leginkább C++ nyelven használják futásidejű, biztonságos leöntéshez. A dinamikus átküldéshez az alaposztálynak 1 virtuális funkcióval kell rendelkeznie. A dinamikus öntés csak polimorf alaposztályokkal működik, mivel ezeket az információkat használja fel a biztonságos leöntés meghatározásához. A dinamikus cast operátor dinamikus öntést végez. Most, hogy ismerjük a dinamikus öntéssel kapcsolatos fogalmakat, áttérhetünk a megvalósítási részre. Először nézzük meg a dinamikus öntés használatának szintaxisát a C++ programozási nyelvben, amelyet alább írunk:

# „dynamic_cast <új_típus>(kifejezés)”

A fenti kifejezésben az első rész az operátor nevét írja le; a szögletes zárójelbe írjuk annak az adattípusnak a nevét, amelyre a kifejezésünket átalakítani kell, a kerek zárójelbe pedig a konvertálni kívánt változó vagy objektum nevét.

Most, hogy tudjuk, hogyan kell használni a dinamikus cast operátort, és kitöltjük a paramétereket a változók adattípusainak konvertálásához, használhatjuk a változók adattípusainak konvertálására.

Dinamikus cast módszer használata Ubuntu 20.04-ben:

Ennek a koncepciónak a megvalósításához több osztályt kell használnunk az osztály objektumainak öröklődés útján történő átalakításához. Tehát ehhez először tudnunk kell, hogy az Ubuntu környezetben lévő C++ programfájl a „.cpp” kiterjesztéssel van tárolva, ezért a fájl asztalon való létrehozásához nyisson meg egy terminált, és írja be a „cd Desktop” parancsot az asztalon. parancssorba, majd nyomja meg az Enter billentyűt, és írja be a „touch filename .cpp” kifejezést a „.cpp” kiterjesztésű fájl létrehozásához. Most egy kódot írunk a fájlba, hogy létrehozzunk egy alaposztályt és 2 származtatott osztályt, az illesztőprogram kódjában pedig a dinamikus cast operátort fogjuk használni.

  Grafikus felhasználói felület, szöveges Leírás automatikusan generálva

A mentés gomb megnyomása után lépjen ki a fájlból. Térjen vissza a terminálhoz, és készítse el a fájlt a „g++” paranccsal a fájlnévvel és a „.cpp” kiterjesztéssel. Ezzel a paranccsal egy „.out” kiterjesztésű fájl jön létre. Most már futtathatja a fájlt a „./” karakterlánc, majd a „.out” kiterjesztéssel.
  Leírás szöveg automatikusan generálva

Ebben a programban az alaposztálymutató származtatott 1. osztályú objektumokat tárol (d1). A dinamikus öntés alaposztálya, a mutató megtartotta a Derived1 objektumot, és hozzárendelte az 1. származtatott osztályhoz, amely érvényes dinamikus öntést biztosított.

Következtetés :

Ez a cikk megtanította nekünk a C++ programozási nyelvben használt típusöntési módszert. A casting típusát is részletesen tárgyaltuk, és arra fókuszáltunk, hogy miért használunk ilyen módszereket a C++ programozásban. Megbeszéltük az RTTI-nek nevezett segédfunkciót, amely a változó adattípusának konvertálását segíti az információk lekérésével és a helyes konverzió ellenőrzésével. Az Ubuntu 20.04 környezetben a C++ programozási nyelvben a dinamikus cast operátor használatával is megvalósítottuk a Dynamic casting koncepcióját.