Dynamic_Cast C++

Dynamic Cast C



Šiame straipsnyje bus aptartas dinaminis atidavimas C++ programavimo kalba. Norėdami pradėti, turime suprasti liejimo sąvoką ir daugelį liejimo tipų. Kintamojo duomenų tipo keitimo procesas žinomas kaip perdavimas. C++ programavimo kalba Casting skirstomas į dvi kategorijas: implicit Casting ir explicit Casting.

Duomenų tipo konvertavimas C++:

Tipo perdavimas yra duomenų tipo pakeitimo į kitą duomenų tipą procedūra. C++ programavimo kalboje yra dviejų tipų liejimas arba tipo konvertavimas: numanomas ir aiškus liejimas. Automatinis tipo konvertavimas yra kitas netiesioginio tipo perdavimo pavadinimas. Tai atlieka kompiliatorius, kai kompiliuoja realiuoju laiku, ir jam nereikia jokių vartotojo įvesties ar veiksmų. Kai išraiškoje yra dviejų tipų duomenų tipai, atsiranda ši liejimo forma. Pavyzdžiui:

  Grafinė vartotojo sąsaja, tekstas, programa Aprašymas generuojamas automatiškai







Pateiktame kode matome, kad paskutinėje eilutės išraiškoje įterpiamas sveikasis kintamasis ir simbolių kintamasis, o sveikojo skaičiaus kintamojo „i“ reikšmė keičiama. ASCII skaičiaus atitikmuo „a“ bus konvertuotas į simbolio reikšmę ir pridėtas prie sveikojo skaičiaus vertės, esančios kintamojo „i“ šiame sakinyje. Jei išspausdinama kintamojo „i“ reikšmė, rezultatas bus iš viso abiejų šių reikšmių. Kompiliatorius automatiškai paverčia simbolių kintamojo duomenų tipą į sveikųjų skaičių duomenų tipą, konvertuodamas jį į standartinę dešinėje esančios abėcėlės ASCII reikšmę, o tai yra puikus numanomo arba automatinio tipo konvertavimo vykdymo metu pavyzdys.



Dabar, kai kalbama apie aiškų tipo liejimą arba tipo konvertavimą, tai nėra automatizuotas procesas; vartotojas turi rankiniu būdu konvertuoti kintamojo duomenų tipą į kito tipo kintamąjį kode. Duomenų tipai paprastai yra išdėstyti hierarchijoje, atsižvelgiant į jų atminties vietą ir informacijos kiekį, kurį jie gali turėti. Taigi, kai žemesnės eilės duomenų tipas naudojamas bet kokiai informacijai saugoti, bet turi būti transformuojamas į aukštesnės eilės duomenų tipą, kad būtų galima sumažinti informacijos praradimą ir išsaugoti vis daugiau informacijos, dažniausiai naudojamas aiškus tipo liejimas arba tipo konvertavimas. padaryta. Pavyzdžiui, kadangi sveikojo skaičiaus tipo kintamasis negali saugoti reikšmių po kablelio, galime prarasti dalį informacijos, jei ir toliau naudosime sveikųjų skaičių kintamuosius. Norėdami išvengti šio praradimo, sveikąjį skaičių paverčiame kintamuoju kintamuoju, išsaugodami reikšmes po kablelio ir užkirsdami kelią informacijos praradimui. Aiškus tipo konvertavimas C++ programavimo kalba gali būti atliktas vienu iš dviejų būdų: per priskyrimą arba naudojant perdavimo operatorių. Priskyrimo konvertavimas atliekamas kodo išraiška, o šios išraiškos sintaksė pateikiama toliau.



# „(duomenų tipo) išraiška“

Aukščiau pateiktame kode skliausteliuose turime įdėti galiojantį duomenų tipą, o po skliausto turime įrašyti kintamąjį arba išraišką, kurią norime modifikuoti, į duomenų tipą, įrašytą skliausteliuose.





Dabar pažvelgsime į konvertavimo tipą, kurį atlieka perdavimo operatoriai C++ programavimo kalba. „Cast“ operatoriai taip pat vadinami vieneriais operatoriais, kurie priverčia kintamąjį pakeisti savo duomenų tipą iš vieno esamo į kitą. Yra keturi atliejimo operatorių tipai: „Static Cast“, „Dynamic Cast“, „Const Cast“ ir „Re-interpret Cast“.

Dinaminis perdavimas C++:

Dinaminis liejimas C++ programavimo kalba yra pagrįstas koncepcija, vadinama RTTI (Run Time Type Identification). RTTI yra funkcija, esanti keliose programavimo kalbose, tokiose kaip C/C++, Ada ir Object Pascal. Vykdymo laiko tipo identifikavimas arba informacija yra funkcija, kuri identifikuoja ir ištraukia informaciją apie objekto duomenų tipą programos vykdymo metu. Ši funkcija suteikia saugų kelią naudoti tipo liejimo metodus, pvz., funkciją „typeid“ arba dinaminio tipo liejimą. Jis aptinka duomenų tipo informaciją apie vykdymo laiką ir padeda konvertuoti duomenų tipą, kai žaidžia operatoriai.



Dinaminis liejimas dažniausiai naudojamas C++, kad būtų užtikrintas saugus liejimas žemyn. Norint dirbti su dinamine perdavimo funkcija, pagrindinė klasė turi turėti 1 virtualią funkciją. Dinaminis liejimas veikia tik su polimorfinėmis bazinėmis klasėmis, nes ji naudoja šią informaciją saugiam liejimui žemyn nustatyti. Dinaminio liejimo operatorius atlieka dinaminį liejimą. Dabar, kai žinome apie sąvokas, susijusias su dinaminiu liejimu, galime pereiti prie įgyvendinimo dalies. Pirmiausia pažvelkime į dinaminio liejimo naudojimo C++ programavimo kalba sintaksę, kuri parašyta žemiau:

# „dynamic_cast (Expression)“

Pirmiau pateiktoje išraiškoje pirmoji dalis apibūdina operatoriaus pavadinimą; kampiniuose skliaustuose įrašome duomenų tipo, į kurį turime konvertuoti savo išraišką, pavadinimą, o apvaliuose skliaustuose įrašome kintamojo arba objekto, kurį norime konvertuoti, pavadinimą.

Dabar, kai žinome, kaip naudoti dinaminio perdavimo operatorių ir užpildyti kintamųjų duomenų tipų konvertavimo parametrus, galime jį naudoti kintamųjų duomenų tipų konvertavimui.

Dinaminio perdavimo metodo naudojimas Ubuntu 20.04:

Norėdami įgyvendinti šią koncepciją, turime naudoti kelias klases, su kuriomis dirbsime konvertuodami klasės objektus paveldėjimo būdu. Taigi, norėdami tai padaryti, pirmiausia turime žinoti, kad C++ programos failas Ubuntu aplinkoje yra saugomas su plėtiniu „.cpp“, todėl norėdami sukurti šį failą darbalaukyje, atidarykite terminalą ir įveskite „cd Desktop“. komandinę eilutę, tada paspauskite enter ir įveskite „touch filename .cpp“, kad sukurtumėte failą su plėtiniu „.cpp“. Dabar tame faile parašysime kodą, kad sukurtume bazinę klasę ir 2 išvestines klases, o tvarkyklės kode naudosime dinaminio perdavimo operatorių.

  Grafinė vartotojo sąsaja, tekstas Aprašymas generuojamas automatiškai

Išeikite iš failo spustelėję išsaugojimo mygtuką. Grįžkite į terminalą ir sukurkite failą naudodami komandą „g++“ su savo failo pavadinimu ir „.cpp“ plėtiniu. Failas su plėtiniu „.out“ bus sukurtas naudojant šią komandą. Dabar galite paleisti tą failą įvesdami „./“ ir „.out“ plėtinį.
  Teksto aprašymas sukurtas automatiškai

Šioje programoje pagrindinės klasės rodyklė saugo išvestinius 1 klasės objektus (d1). Dinaminio liejimo bazinė klasė, rodyklė išlaikė objektą „Derived1“ ir priskyrė jį 1 išvestinei klasei, kuri suteikė galiojantį dinaminį liejimą.

Išvada :

Šiame straipsnyje sužinojome apie tipo liejimo metodą, naudojamą C++ programavimo kalboje. Taip pat buvo išsamiai aptartas liejimo tipas, o mes sutelkėme dėmesį į poreikį, kodėl mes naudojame tokius metodus C++ programavime. Aptarėme pagalbinę funkciją, kuri padeda konvertuoti kintamojo duomenų tipą, gaudama informaciją ir patikrindama, ar konversija yra teisinga, vadinama RTTI. Taip pat įdiegėme dinaminio perdavimo koncepciją, naudodami dinaminio perdavimo operatorių išraiškoje C++ programavimo kalba Ubuntu 20.04 aplinkoje.