Dynamic_Cast C++

Dynamic Cast C



De dynamische cast in de programmeertaal C++ wordt in dit artikel besproken. Om te beginnen moeten we het begrip casting en vele soorten casting begrijpen. Het proces van het wijzigen van het gegevenstype van een variabele staat bekend als casten. Casting is in de programmeertaal C++ onderverdeeld in twee categorieën: impliciete casting en expliciete casting.

Gegevenstypeconversie in C++:

Typecasting is de procedure waarbij het gegevenstype wordt gewijzigd in een ander gegevenstype. Er zijn twee soorten casting of typeconversie in de programmeertaal C++: impliciete en expliciete casting. Geautomatiseerde typeconversie is een andere naam voor impliciete typecasting. Het wordt uitgevoerd door de compiler tijdens real-time compilatie en vereist geen invoer of actie van de gebruiker. Wanneer er twee soorten gegevenstypen in een uitdrukking voorkomen, vindt deze vorm van casten plaats. Bijvoorbeeld:

  Grafische gebruikersinterface, tekst, toepassing Beschrijving automatisch gegenereerd







In de gegeven code kunnen we zien dat een integer-variabele en een karakter-variabele worden ingevoegd in de uitdrukking van de laatste regel, en dat de waarde van de integer-variabele 'i' wordt gewijzigd. Het ASCII-equivalent van 'a' wordt geconverteerd naar een tekenwaarde en opgeteld bij de gehele waarde van de variabele 'i' in deze instructie. Als de waarde van de variabele 'i' wordt afgedrukt, is het resultaat een totaal van beide waarden. De compiler transformeert het gegevenstype van de tekenvariabele automatisch naar een gegevenstype met een geheel getal door het te converteren naar de ASCII-standaardwaarde van het alfabet aan de rechterkant, wat een goed voorbeeld is van impliciete of geautomatiseerde typeconversie tijdens de looptijd.



Als het gaat om expliciete typecasting of typeconversie, is dit geen geautomatiseerd proces; de gebruiker moet een gegevenstype van een variabele handmatig converteren naar een ander type variabele in de code. De gegevenstypen zijn meestal gerangschikt in een hiërarchie op basis van hun geheugenruimte en de hoeveelheid informatie die ze kunnen bevatten. Dus wanneer een gegevenstype van lagere orde wordt gebruikt om informatie op te slaan, maar moet worden getransformeerd naar een gegevenstype van hogere orde zodat informatieverlies kan worden geminimaliseerd en meer en meer informatie kan worden opgeslagen, is expliciete typecasting of typeconversie gewoonlijk gedaan. Omdat een variabele van het type integer bijvoorbeeld geen waarden achter de komma kan opslaan, kunnen we wat informatie verliezen als we integer-variabelen blijven gebruiken. Om dit verlies te voorkomen, converteren we de integer-variabele naar een float-variabele, waarbij waarden achter de komma worden opgeslagen en informatieverlies wordt voorkomen. De expliciete typeconversie in de programmeertaal C++ kan op twee manieren worden uitgevoerd: via toewijzing of door gebruik te maken van de cast-operator. De toewijzingsconversie wordt uitgevoerd in een code-expressie en de syntaxis voor deze expressie vindt u hieronder.



# '(gegevenstype) uitdrukking'

In de bovenstaande code moeten we een geldig gegevenstype tussen haakjes plaatsen en na het haakje moeten we de variabele of uitdrukking die we willen wijzigen, schrijven in het gegevenstype dat tussen haakjes staat.





Nu zullen we kijken naar het type conversie dat wordt uitgevoerd door de cast-operators in de programmeertaal C++. Cast-operators worden ook unaire operators genoemd die een variabele dwingen om het datatype van het ene bestaande naar het andere te wijzigen. Er zijn vier soorten cast-operators: Statische cast, Dynamische cast, Const-cast en Re-interpret cast.

Dynamisch casten in C++:

Dynamisch casten in de programmeertaal C++ is gebaseerd op een concept genaamd RTTI (Run Time Type Identification). RTTI is een functie die aanwezig is in verschillende programmeertalen zoals C/C++, Ada en Object Pascal. Runtime-type-identificatie of -informatie is een functie die de informatie identificeert en extraheert met betrekking tot de details van het gegevenstype van een object tijdens de looptijd van een programma. Deze functie biedt een veilig pad voor methoden voor typecasting, zoals de 'typeid'-functie of dynamische typecasting. Het detecteert de gegevenstype-informatie over de looptijd en helpt bij de conversie van het gegevenstype wanneer de operators in het spel zijn.



Dynamisch casten wordt meestal gebruikt in C++ voor runtime-safe downcasting. Om met de dynamische cast te werken, moet de basisklasse 1 virtuele functie hebben. Dynamische cast werkt alleen met polymorfe basisklassen omdat deze informatie wordt gebruikt om veilige downcasting te bepalen. Een dynamische cast-operator doet dynamisch casten. Nu we de concepten met betrekking tot dynamische casting kennen, kunnen we naar het implementatiegedeelte gaan. Laten we eerst kijken naar de syntaxis voor het gebruik van dynamisch casten in de programmeertaal C++, die hieronder wordt beschreven:

# 'dynamic_cast (Expressie)'

In de bovenstaande uitdrukking beschrijft het eerste deel de naam van de operator; tussen de punthaken schrijven we de naam van het gegevenstype waarnaar we onze uitdrukking moeten converteren, en tussen de ronde haken schrijven we de naam van de variabele of het object dat we willen converteren.

Nu we weten hoe we de dynamische cast-operator moeten gebruiken en de parameters moeten invullen voor het converteren van gegevenstypen van variabelen, kunnen we deze gebruiken om gegevenstypen van variabelen te converteren.

De dynamische cast-methode gebruiken in Ubuntu 20.04:

Om dit concept te implementeren, moeten we verschillende klassen gebruiken om mee te werken voor het converteren van objecten van de klasse door overerving. Dus om dat eerst te doen, moeten we eerst weten dat het C++-programmabestand in de Ubuntu-omgeving is opgeslagen met de extensie '.cpp', dus om dit bestand op onze desktop te maken, opent u een terminal en typt u 'cd Desktop' op de opdrachtregel, druk vervolgens op enter en typ 'touch filename .cpp' om een ​​bestand met de extensie '.cpp' te maken. Nu zullen we een code in dat bestand schrijven om een ​​basisklasse en 2 afgeleide klassen te maken, en in de drivercode zullen we de dynamische cast-operator gebruiken.

  Grafische gebruikersinterface, tekst Beschrijving wordt automatisch gegenereerd

Verlaat het bestand nadat u op de knop Opslaan hebt geklikt. Keer terug naar de terminal en bouw het bestand op met de opdracht 'g++' met uw bestandsnaam en de extensie '.cpp'. Met deze opdracht wordt een bestand met de extensie '.out' gemaakt. U kunt dat bestand nu uitvoeren door './' in te voeren, gevolgd door uw '.out' -extensie.
  Tekstbeschrijving automatisch gegenereerd

In dit programma slaat de basisklassewijzer afgeleide klasse 1-objecten (d1) op. De dynamische casting-basisklasse, de aanwijzer, behield het Derived1-object en wees het toe aan afgeleide klasse 1, wat een geldige dynamische casting opleverde.

Conclusie :

Dit artikel heeft ons de type casting-methode geleerd die wordt gebruikt in de programmeertaal C ++. Het type casting werd ook in detail besproken, en we concentreerden ons op de noodzaak waarom we dergelijke methoden gebruiken in C++-programmering. We bespraken de hulpfunctie die helpt bij de conversie van het gegevenstype van een variabele door informatie op te halen en te controleren op correcte conversie, RTTI genaamd. We hebben ook het concept van dynamische casting geïmplementeerd door de dynamische cast-operator te gebruiken in een uitdrukking in de programmeertaal C++ in de Ubuntu 20.04-omgeving.