Dynamic_Cast C++

Dynamic Cast C



Selles artiklis käsitletakse dünaamilist ülekannet C++ programmeerimiskeeles. Alustuseks peame mõistma valamise mõistet ja mitut tüüpi valamist. Muutuja andmetüübi muutmise protsessi nimetatakse ülekandmiseks. Casting on C++ programmeerimiskeeles jagatud kahte kategooriasse: kaudne ülekandmine ja eksplitsiitne ülekandmine.

Andmetüübi teisendamine C++ keeles:

Tüübi ülekandmine on andmetüübi muutmise protseduur mõneks muuks andmetüübiks. Programmeerimiskeeles C++ on kahte tüüpi valamist või tüübiteisendust: kaudne ja eksplitsiitne valamine. Automaatne tüübikonversioon on kaudse tüübiedastuse teine ​​nimi. Seda teostab kompilaator reaalajas kompileerimise ajal ja see ei vaja kasutajapoolset sisestust ega tegevust. Kui avaldises on kahte tüüpi andmetüüpe, toimub see ülekandmise vorm. Näiteks:

  Graafiline kasutajaliides, tekst, rakendus Kirjeldus genereeritakse automaatselt







Antud koodis näeme, et viimase rea avaldisesse sisestatakse täisarvuline muutuja ja märgimuutuja ning muudetakse täisarvu muutuja “i” väärtust. ASCII-numbri ekvivalent „a” teisendatakse märgi väärtuseks ja lisatakse selles lauses muutuja „i” täisarvu väärtusele. Kui printida muutuja “i” väärtus, on tulemuseks mõlemad väärtused kokku. Kompilaator teisendab tähemärgimuutuja andmetüübi automaatselt täisarvuliseks andmetüübiks, teisendades selle parempoolse tähestiku ASCII standardväärtuseks, mis on suurepärane näide kaudsest või automatiseeritud tüübi teisendamisest käitusajal.



Kui nüüd rääkida selgesõnalisest tüübi valamisest või tüübi teisendamisest, siis see ei ole automatiseeritud protsess; kasutaja peab koodis oleva muutuja andmetüübi käsitsi teisendama teist tüüpi muutujaks. Andmetüübid on tavaliselt paigutatud hierarhiasse vastavalt nende mäluruumile ja mahutavale teabele. Seega, kui mis tahes teabe salvestamiseks kasutatakse madalama järgu andmetüüpi, kuid see tuleb teisendada kõrgema järgu andmetüübiks, et teabekadu oleks võimalik minimeerida ja salvestada üha rohkem teavet, kasutatakse tavaliselt selgesõnalist tüüpi valamist või tüübi teisendamist. tehtud. Näiteks kuna täisarvu tüüpi muutuja ei saa salvestada väärtusi pärast koma, võime kaotada osa teabest, kui jätkame täisarvu muutujate kasutamist. Selle kadumise vältimiseks teisendame täisarvu muutuja ujuvmuutujaks, salvestades väärtused pärast koma ja hoides ära teabe kadumise. Selgesõnalise tüübi teisenduse C++ programmeerimiskeeles saab teostada kahel viisil: määramise kaudu või cast-operaatorit kasutades. Omistamise teisendamine toimub koodiavaldises ja selle avaldise süntaks on toodud allpool.



# '(andmetüüp) avaldis'

Ülaltoodud koodis tuleb sulgudes panna kehtiv andmetüüp ja sulu järel tuleb kirjutada muutuja või avaldis, mida soovime muuta, sulgudesse kirjutatud andmetüübiks.





Nüüd uurime C++ programmeerimiskeeles cast-operaatorite tehtud teisendustüüpe. Cast operaatoreid nimetatakse ka unaarseteks operaatoriteks, mis sunnivad muutujat muutma oma andmetüüpi ühelt olemasolevalt teisele. Valamise operaatoreid on nelja tüüpi: staatiline ülekandmine, dünaamiline ülekandmine, pidev ülekandmine ja uuesti tõlgendamine.

Dünaamiline ülekandmine C++ keeles:

Dünaamiline ülekandmine C++ programmeerimiskeeles põhineb kontseptsioonil nimega RTTI (Run Time Type Identification). RTTI on funktsioon, mis esineb mitmes programmeerimiskeeles, nagu C/C++, Ada ja Object Pascal. Käitusaja tüübi identifitseerimine või teave on funktsioon, mis tuvastab ja eraldab teabe objekti andmetüübi üksikasjade kohta programmi käitamisajal. See funktsioon pakub turvalise tee tüübivalamise meetoditele, nagu funktsioon 'typeid' või dünaamiline tüübivalu. See tuvastab andmetüübi teabe käitusaja kohta ja aitab andmetüüpi teisendada, kui operaatorid on mängus.



Dünaamilist valamist kasutatakse peamiselt C++-s tööaja ohutuks allavalamiseks. Dünaamilise ülekandega töötamiseks peab baasklassil olema 1 virtuaalne funktsioon. Dünaamiline ülekandmine töötab ainult polümorfsete põhiklassidega, kuna see kasutab seda teavet ohutu allavalamise määramiseks. Dünaamiline valamisoperaator teeb dünaamilist valamist. Nüüd, kui me teame dünaamilise castinguga seotud kontseptsioone, võime minna juurutusosa juurde. Vaatame kõigepealt dünaamilise ülekandmise süntaksit C++ programmeerimiskeeles, mis on kirjutatud allpool:

# 'dynamic_cast (väljend)'

Ülaltoodud väljendis kirjeldab esimene osa operaatori nime; nurksulgudesse kirjutame selle andmetüübi nime, milleks peame oma avaldise teisendama, ja ümarsulgudesse muutuja või objekti nime, mida tahame teisendada.

Nüüd, kui teame, kuidas kasutada dünaamilise ülekandmise operaatorit ja täita muutujate andmetüüpide teisendamiseks parameetreid, saame seda kasutada muutujate andmetüüpide teisendamiseks.

Dünaamilise ülekandmise meetodi kasutamine Ubuntu 20.04-s:

Selle kontseptsiooni rakendamiseks peame klassi objektide pärimise teel teisendamiseks kasutama mitut klassi. Selle tegemiseks peame esmalt teadma, et C++ programmifail Ubuntu keskkonnas on salvestatud laiendiga „.cpp”, nii et selle faili loomiseks meie töölaual avage terminal ja tippige käsk „cd Desktop”. käsureal, seejärel vajutage sisestusklahvi ja tippige 'touch filename .cpp', et luua fail laiendiga '.cpp'. Nüüd kirjutame sellesse faili koodi baasklassi ja 2 tuletatud klassi loomiseks ning draiverikoodis kasutame dünaamilise ülekande operaatorit.

  Graafiline kasutajaliides, tekst Kirjeldus genereeritakse automaatselt

Pärast salvestamisnupu klõpsamist väljuge failist. Naaske terminali ja looge fail, kasutades käsku 'g++' koos oma failinime ja laiendiga '.cpp'. Selle käsu abil luuakse fail laiendiga “.out”. Nüüd saate seda faili käivitada, sisestades './', millele järgneb laiend '.out'.
  Tekst Kirjeldus genereeritakse automaatselt

Selles programmis salvestab baasklassi osuti tuletatud klassi 1 objektid (d1). Dünaamilise valamise baasklass, kursor säilitas objekti Derived1 ja määras selle tuletatud klassi 1, mis tagas kehtiva dünaamilise ülekandmise.

Järeldus :

See artikkel õpetas meile C++ programmeerimiskeeles kasutatavat tüüpi valamise meetodit. Täpsemalt arutati ka valamise tüüpi ning keskendusime vajadusele, miks me selliseid meetodeid C++ programmeerimises kasutame. Arutasime abifunktsiooni, mis aitab muuta muutuja andmetüüpe, hankides teavet ja kontrollides õiget teisendust, mida nimetatakse RTTI-ks. Samuti rakendasime dünaamilise ülekandmise kontseptsiooni, kasutades Ubuntu 20.04 keskkonnas C++ programmeerimiskeeles avaldises dünaamilise ülekandmise operaatorit.