Dyp kopi c ++

Dyp kopi c ++
Kopien betyr det samme til den samme kopien av et originalt objekt. Innenfor programmering er det forskjellige metoder for å lage kopier av objekter. Kopien av objekter, variabler kan gjøres med en kopikonstruktør eller ved å bruke standardoppdragsoperatøren "=". To typer kopier kan lages i C ++ -koden, i.e., Grunt og dyp kopi. Du kan bruke en til å kopiere hvilken som helst variabel eller objekt i koden. Når objektet vårt har variabler som er dynamisk tildelt i hele programmet, må vi lage en dyp kopi av en slik type objekt. Denne artikkelen vil se hvordan en dyp kopi kan opprettes i C++.

Grunt kopi vs. Dyp kopi

Før man ser på eksemplet med dyp kopi, må man også forstå den grunne kopien. Så den grunne kopien er opprettet når du vil kopiere alle variabler av ett objekt til et annet objekt. Du kan kalle det et speilbilde, men det er ikke det originale. Både de originale og nye objektene, jeg.e., Replika, vil referere til den samme minneadressen innen den grunne kopien. Dette betyr at både originale, og replikaobjekter vil bli gjenkjent og hentet med samme minneadresse. Når en bruker prøver å gjøre endringer i ett objekt, vil den automatisk gjenspeile endringen i et annet objekt også på grunn av den samme minneadressen. Dette kan forårsake mange feil mens utførelsen, og det virkelige og replika -objektet vil bli ødelagt. Dermed sies det å unngå å bruke grunne kopi når du har jobbet med dynamisk tildelte variabler av et bestemt objekt.

Det anbefales å bruke den dype kopien i stedet for den grunne kopien mens du bruker de dynamisk tildelte variablene. Den dype kopien kan fås ved å kopiere alle dataene til et objekt, i.e., Variable verdier, minnetildeling og ressurser, til den nye mens både det virkelige og replika -objektet har en helt annen minneadresse. Det kan brukes til et objekt som har variabler som tildeles dynamisk. Så la oss begynne det.

Eksempel: Dyp kopi

Vi har startet vårt eksempel for å demonstrere Deep Copy -konseptet innen C ++ -programmering ved å åpne Shell -konsollen til Ubuntu 20.04 System. Den første tingen å gjøre er å produsere en ny C ++ -fil for kode. Den evige, gamle og enkleste kommandoen levert av Linux -distribusjonen for å lage et dokument i skallterminalen er "berøring" -instruksjon. Det enkle ordet "berøring" vil bli brukt med tittelen på et dokument som skal genereres. Sørg for å legge til C ++ -forlengelsen på slutten av dokumentnavnet; Ellers vil ikke koden fungere på skallet etter utførelsen av filen. Etter denne filopprettelsen kommer det trinnet for å åpne den.

Det aller beste med Ubuntu 20.04 er, det kommer med noen innebygde redaktører for å åpne og redigere filer. Den inneholder “Vim” -redigereren for å redigere i et veldig fargerikt miljø, Text Editor for å oppdatere og redigere koden i det enkleste miljøet, og GNU Nano Editor for å opprette og redigere koden i Shell. Dermed har vi kastet av kodedaktøren, jeg.e., GNU Nano -redaktør i vårt tilfelle, og Nano -ordet brukes til å åpne dokumentet “Deep.CC ”. Instruksjonene for å generere og lansere dokumentet “Dyp.CC ”er oppgitt på skjermdumpen nedenfor.

Etter at GNU Nano -redaktøren for kode har lansert tekstdokumentet “Deep.CC ”I det må vi legge til noen biblioteker i det først. Disse bibliotekene er påkrevd for utførelse av kode på en bestemt måte. Input-output-strømmen “IO” er inkludert ved å bruke ordet “Inkluder” med en hasjkarakter, i.e., “#”. Bruken av et standard navneområde er nødvendig for at C ++ -kode skal bruke CIN- og COUT -utsagnene i den. Koden er startet med erklæringen om en ny klasse som heter “Test”. Denne klassen har blitt initialisert med tre heltalldatamedlemmer. Variablene “Len” og “wid” er de normale heltallvariablene, mens “alder” er en pekervariabel. Test () -konstruktøren er initialisert, og den brukes til å initialisere pekeren "alder" med en viss heltallstype dynamisk.

En brukerdefinert funksjon som heter “Set” uten returtype er startet. Det tar tre argumenter av heltallstype i sine parametere, i.e., “L”, “W” og “A”. Denne funksjonen brukes her for å få verdiene fra Main () -funksjonen og lagre dem innenfor variablene, eller datamedlemmer erklært før i starten av en klasse “test” i.e., “Len”, “wid” og pekertype variabel “alder”. En annen brukerdefinert funksjon som heter “Display ()” har blitt brukt uten parametriske verdier. Denne funksjonen bruker en enkelt standard cout -setning i den. COUT -uttalelsen bruker variablene “len”, “wid” og “*alder” for å vise de allerede angitte verdiene etter SET () -funksjonen.

Nå har vi brukt den parameteriserte konstruktørfunksjonstesten () av ​​klasse “test” for å implementere konseptet med dyp kopi i programmet vårt. Denne parameteriserte konstruktøren vil bli kalt når et nytt objekt opprettes. Det får klassen "test" -typekonkurranse i sin parameter, i.e., Original objekt. Dette første objektet som er gitt innenfor parametere vil bli brukt til å kopiere alle de originale objektens data i det nye objektet slik det er demonstrert på bildet. Klassetestdestruktøren har blitt brukt til å ødelegge objektet med klassetesten mens den slettet den dynamisk tildelte minnevariabelen “alder” etter at programutførelsen er i ferd med å fullføre. Testklassen er stengt her, og utførelsen vil bli startet med hovedfunksjonen.

Nå kommer hovedfunksjonen. Utførelsen starter herfra når det første objektet, “T1” i klassetesten, opprettes. "Test ()" -konstruktøren kjøres automatisk med opprettelsen av objektet "T1" og tilordner dynamisk kuppelminne til den dynamiske variabelen "alder". Set () -funksjonen er blitt kalt ved bruk av Object T1, og for å stille inn verdiene til variablene, vil displayet () -funksjonen bli kalt for å vise verdiene på skallet. Det andre objektet, T2, er opprettet fil dyp kopiering av alle dataene til objekt T1 etter tildeling. Den parameteriserte konstruktøren vil bli kalt her. Når vi kaller Display () -metoden med objekt T2, vil den vise det samme resultatet som for objekt 1. Destructor vil bli utført automatisk ettersom objektet er ferdig med å fungere.

Etter samlingen med G ++ og utførelse med “./en.ut, ”vi har de samme resultatene av Display () -metoden for objekter T1 og T2.

Konklusjon

Innenfor denne artikkelguiden vil du finne ut forklaringen av dyp kopi sammen med et eksempel på demonstrasjon. Vi har startet denne guiden med. Deretter har vi dekket forskjellen mellom å bruke dyp kopi og grunne kopi innen C ++ -kode for å kopiere objekter. Vi har lagt til et kort og enkelt eksempel på Deep Copy -programmet for å demonstrere det mer. Derfor tror vi at denne artikkelen vil være veldig gunstig for alle naive C ++ brukere og de som allerede er eksperter på sitt domene.