Kako implementirati konstruktor kopiranja u C ++?



Razumijevanje konstruktora mnogima je bila enigma. Ovaj će vam članak pomoći da demistificirate koncept konstruktora kopiranja u jeziku C ++

Razumijevanje Konstruktori je za mnoge bila enigma. Ovaj će vam članak pomoći da demistificirate koncept konstruktora kopiranja u jeziku C ++. U ovom će članku biti obrađeni sljedeći putokazi,

Pa krenimos ovim člankom o Konstruktoru kopiranja na C ++





Konstruktor kopija je konstruktor koji inicijalizira objekt klase koristeći drugi objekt iste klase.

Sintaksa:



Ključnu riječ const imamo jer želimo vrijednost učiniti konstantnom i osigurati da ona nije modificirana negdje u kodu. Kao i zadani konstruktor, i konstruktor kopije pruža kompajler. To se naziva zadani konstruktor kopija. Konstruktori za kopiranje mogu se učiniti privatnima. Ne možemo kopirati objekte klase kada konstruktor kopiranja učinimo privatnim.

Evo primjera koda :

#include koristeći test prostora std class {private: int x public: test (int x1) {x = x1} test (const test & t2) {x = t2.x} int getX () {return x}} int main () {test t1 (7) // Ovdje se naziva normalni konstruktor test t2 = t1 // ovdje se zove konstruktor kopije<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Izlaz:



Konstruktor izlaznih kopija u C ++ - Edureka

Obrazloženje

Gornji program osnovni je demo konstruktora kopija. Imamo test klase s članom privatnih podataka tipa int koji se zove x. Tada imamo parametarski konstruktor, koji varijablama x dodjeljuje 7. Imamo konstruktor kopije, koji instancira vrijednost t2 s vrijednošću t1. Poslana je adresa t2 koja sadrži vrijednost t1 i dodijeljena je x. Postoji funkcija get koja vraća vrijednost x.

Glavna funkcija ima objekt testa klase nazvan t1. Uz ovaj je objekt povezana vrijednost, ovo je parametar. Glavna funkcija ima još jedan objekt testa klase nazvan t2. To se inicijalizira korištenjem varijable t1 i ovdje se poziva konstruktor kopiranja. Napokon, funkcija get poziva se u odnosu na t1 i t2 da bi se dobila vrijednost x.

Vrste

Postoje dvije vrste konstruktora kopiranja.
Con Konstruktor za plitke kopije
Con Konstruktor dubokih kopija

Nastavljamo s ovim člankom o Konstruktoru kopiranja na C ++

Konstruktor plitke kopije:

Konstruktor plitke kopije zadani je konstruktor kopije.

Primjer:

Dvije osobe istodobno pristupaju bazi podataka i mijenjaju vrijednosti u dva različita sustava. Ako tada izvrše promjene u bazi podataka, obje će se promjene prikazati u bazi podataka. Oba će objekta ukazivati ​​na isto memorijsko mjesto. Ovo je konstruktor plitkih kopija. To se uglavnom događa kada radimo sa zadanim konstruktorom kopija. Evo primjera koda za: Konstruktor za površinsko kopiranje:

#include using space names std class test {public: int y, z test (int y1, int z1) {y = y1 z = z1}} int main () {test a (7,13) cout<<'the sum is: '<< a.y+a.z return 1 } 

Izlaz:

Obrazloženje:

U gornjem kodu koristimo zadani konstruktor kopije koji je osigurao prevoditelj. Stoga je to konstruktor plitkih kopija.

Nastavljamo s ovim člankom o Konstruktoru kopiranja na C ++

Konstruktor dubokih kopija

Konstruktor dubokih kopija je korisnički definirani konstruktor kopija.
Na primjer:
Kad dvoje ljudi moraju izvesti prezentaciju i oboje kopiraju iz istog izvora, kopije su odvojene. Dakle, kada napravite izmjene, to neće utjecati samo na drugu kopiju. Ovo je konstruktor dubokih kopija. Oba će objekta biti usmjerena na različita memorijska mjesta, a promjene na jednom neće imati učinka na drugo. Memorija se dinamički dodjeljuje.

Evo primjera koda za: Konstruktor dubokog kopiranja:

#include koristeći test prostora std class {private: int x public: test (int x1) {x = x1} test (const test & t2) {x = t2.x} int getX () {return x}} int main () {test t1 (7) // Ovdje se naziva normalni konstruktor test t2 = t1 // ovdje se zove konstruktor kopije<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Izlaz:

najbolja java ide za linux

Obrazloženje

To je isti kod koji smo koristili gore, dajući slične rezultate. To je korisnički definirani konstruktor kopiranja i stoga je konstruktor dubokog kopiranja.

Tako smo došli do kraja ovog članka o 'Konstruktoru kopiranja u C ++'. Ako želite saznati više, pogledajte Edureka, pouzdane tvrtke za internetsko učenje. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA osmišljen je kako bi vas osposobio za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga i javit ćemo vam se što je prije moguće.