Com implementar el constructor de còpies a C ++?



La comprensió dels constructors ha estat un enigma per a molts. Aquest article us ajudarà a desmitificar el concepte de constructor de còpies a C ++

Comprensió Constructors ha estat un enigma per a molts. Aquest article us ajudarà a desmitificar el concepte de constructor de còpies a C ++. En aquest article es tractaran les següents indicacions,

Comencem, doncs,amb aquest article sobre Copy Constructor en C ++





Un constructor de còpia és un constructor que inicialitza un objecte d'una classe mitjançant un altre objecte de la mateixa classe.

Sintaxi:



Tenim la paraula clau const perquè volem que el valor sigui constant i ens assegurem que no es modifiqui en cap lloc del codi. Igual que un constructor per defecte, el compilador també proporciona un constructor de còpies. Això s’anomena constructor de còpia per defecte. Els constructors de còpies es poden convertir en privats. No podem copiar els objectes de la classe quan fem privat el constructor de còpies.

Aquí teniu un exemple de codi :

#include using namespace 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) // Aquí es diu constructor normal test t2 = t1 // El constructor de còpia es diu aquí cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Sortida:



Constructor de còpia de sortida a C ++ - Edureka

Explicació

El programa anterior és una demostració bàsica d’un constructor de còpies. Tenim una prova de classe, amb un membre de dades privades del tipus int anomenat x. Després tenim un constructor parametritzat, que assigna 7 a les variables x. Tenim un constructor de còpies, que instancia el valor de t2 amb el valor de t1. S'envia l'adreça de t2 que manté el valor de t1 i s'assigna a x. Existeix una funció get que retorna el valor de x.

La funció principal té un objecte de prova de classe anomenat t1. Hi ha un valor associat a aquest objecte, aquest és un paràmetre. La funció principal té un altre objecte de prova de classe anomenat t2. Això s’inicialitza mitjançant la variable t1 i s’anomena aquí el constructor de còpia. Finalment, es crida la funció get respecte a t1 i t2 per obtenir el valor de x.

Tipus

Hi ha dos tipus de constructor de còpies.
⦁ Constructor de còpies superficials
⦁ Constructor de còpia profunda

Continuem amb aquest article sobre Copy Constructor en C ++

Constructor de còpies poc profundes:

Un constructor de còpies superficials és un constructor de còpia per defecte.

Exemple:

Dues persones accedeixen a una base de dades alhora i fan canvis als valors de dos sistemes diferents. Si fan canvis a la base de dades, tots dos canvis es mostraran a la base de dades. Tots dos objectes apuntaran a la mateixa ubicació de memòria. Es tracta del constructor de còpies superficials. Això passa sobretot quan treballem amb el constructor de còpia per defecte. Aquí teniu un exemple de codi per a: Constructor de còpia superficial:

#include using namespace 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 } 

Sortida:

Explicació:

Al codi anterior, fem servir un constructor de còpia predeterminat proporcionat pel compilador. Per tant, és un constructor de còpies superficials.

Continuem amb aquest article sobre Copy Constructor en C ++

Constructor de còpies profundes

Deep Copy Constructor és un constructor de còpies definit per l'usuari.
Per exemple:
Quan dues persones han de fer una presentació i totes dues copien de la mateixa font, les còpies són separades. Per tant, quan feu modificacions només l’altra còpia no es veu afectada. Es tracta de Deep Copy Constructor. Tots dos objectes apuntaran a ubicacions de memòria diferents i els canvis en un no tindran efectes sobre l’altre. La memòria s’assigna dinàmicament.

Aquí teniu un exemple de codi per a: Deep Copy Constructor:

#include using namespace 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) // Aquí es diu constructor normal test t2 = t1 // El constructor de còpia es diu aquí cout<< 't1.x = ' << t1.getX() cout << 'nt2.x = ' << t2.getX() return 0 } 

Sortida:

funció virtual c ++ = 0

Explicació

Aquest és el mateix codi que hem utilitzat anteriorment, donant una sortida similar. És un constructor de còpies definit per l'usuari i, per tant, és un constructor de còpia profunda.

Així hem arribat al final d’aquest article sobre ‘Constructor de còpies en C ++’. Si voleu obtenir més informació, consulteu el per Edureka, una empresa d’aprenentatge en línia de confiança. El curs de formació i certificació Java J2EE i SOA d’Edureka està dissenyat per formar-vos tant per a conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate & Spring

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc i us respondrem el més aviat possible.