Cum se implementează un constructor de copiere în C ++?



Înțelegerea constructorilor a fost o enigmă pentru mulți. Acest articol vă va ajuta să demistificați conceptul de constructor de copiere în C ++

Înţelegere Constructori a fost o enigmă pentru mulți. Acest articol vă va ajuta să demistificați conceptul de constructor de copiere în C ++. Următoarele indicații vor fi tratate în acest articol,

Așa că hai să începemcu acest articol despre Copy Constructor în C ++





Un constructor de copiere este un constructor care inițializează un obiect al unei clase folosind un alt obiect din aceeași clasă.

Sintaxă:



Avem cuvântul cheie const pentru că vrem să facem valoarea constantă și să ne asigurăm că nu este modificată undeva în cod. La fel ca un constructor implicit, un compilator de copiere este, de asemenea, furnizat de compilator. Aceasta se numește Constructor de copiere implicit. Constructorii de copii pot fi făcute private. Nu putem copia obiectele clasei atunci când facem constructorul copiei privat.

Iată un exemplu de cod :

#includeți utilizarea spațiului de nume std class test {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) // Constructorul normal este numit aici test t2 = t1 // Constructorul de copiere este numit aici cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Ieșire:



Constructor de ieșire-copiere în C ++ - Edureka

Explicaţie

Programul de mai sus este o demonstrație de bază a unui constructor de copii. Avem un test de clasă, cu un membru de date private de tip int numit x. Apoi avem un constructor parametrizat, care atribuie 7 variabilelor x. Avem un constructor de copii, care instanțiază valoarea lui t2 cu valoarea lui t1. Se trimite adresa t2 care deține valoarea lui t1 și este atribuită lui x. Există o funcție get care returnează valoarea lui x.

Funcția principală are un obiect de test de clasă numit t1. Există o valoare asociată acestui obiect, acesta este un parametru. Funcția principală are un alt obiect al testului de clasă numit t2. Aceasta este inițializată utilizând variabila t1 și constructorul de copii este apelat aici. În sfârșit, funcția get este apelată în raport cu t1 și t2 pentru a obține valoarea lui x.

Tipuri

Există două tipuri de constructor de copii.
⦁ Constructor de copiere superficială
⦁ Constructor Deep Copy

Continuăm cu acest articol despre Copy Constructor în C ++

Constructor de copiere superficială:

Un constructor de copiere superficială este un constructor de copiere implicit.

Exemplu:

Două persoane accesează o bază de date în același timp și modifică valorile pe două sisteme diferite. Dacă fac modificări în baza de date, ambele modificări vor fi afișate în baza de date. Ambele obiecte vor indica aceeași locație de memorie. Acesta este Constructorul de copiere superficială. Acest lucru se întâmplă mai ales atunci când lucrăm cu constructorul implicit de copiere. Iată un exemplu de cod pentru: Constructor de copiere superficială:

#includeți utilizarea spațiului de nume 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 } 

Ieșire:

Explicaţie:

În codul de mai sus, folosim un constructor implicit de copiere furnizat de compilator. Prin urmare, este un constructor de copiere superficială.

Continuăm cu acest articol despre Copy Constructor în C ++

Constructor de copiere profundă

Deep Copy Constructor este un constructor de copii definit de utilizator.
De exemplu:
Când două persoane trebuie să facă o prezentare și ambele să copieze din aceeași sursă, copiile sunt separate. Deci, atunci când faceți modificări, numai cealaltă copie nu este afectată. Acesta este Deep Copy Constructor. Ambele obiecte vor fi îndreptate către locații de memorie diferite, iar modificările din unul nu vor avea efecte asupra celuilalt. Memoria este alocată dinamic.

Iată un exemplu de cod pentru: Deep Copy Constructor:

#includeți utilizarea spațiului de nume std class test {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) // Constructorul normal este numit aici test t2 = t1 // Constructorul de copiere este numit aici cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Ieșire:

seria Fibonacci în c ++

Explicaţie

Acesta este același cod pe care l-am folosit mai sus, oferind o ieșire similară. Este un constructor de copiere definit de utilizator și, prin urmare, este un constructor de copiere profundă.

Astfel am ajuns la sfârșitul acestui articol despre „Copierea constructorului în C ++”. Dacă doriți să aflați mai multe, consultați de Edureka, o companie de învățare online de încredere. Cursul de formare și certificare Java J2EE și SOA Edureka este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate Java, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog și vă vom contacta cât mai curând posibil.