constructor de copias
En C++, una función con el mismo nombre que el nombre de la clase y cuyos parámetros formales son tipos de referencia de objetos de esta clase se llama constructor de copia . Al igual que el constructor, el sistema generará uno automáticamente cuando no lo definimos activamente. realizar asignaciones simples correspondientes entre dos miembros de objeto, utilizadas para inicializar un objeto, como en la siguiente situación:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{privado:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle(doubleR){cout<<Constructor <<endl;this->R=R;}Círculo::Círculo(Círculo&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::girth(){return2*PI*R;}intmain(){CírculoA(5);CírculoB(A);return0;}
En este ejemplo, se define una clase Circle y se definen respectivamente un constructor con parámetros y un constructor de copia. Luego se define el objeto A en la función principal, se pasa el valor inicial y se llama al constructor con parámetros. Y defina el objeto B e inicialice el objeto B a través del objeto A. Los resultados de ejecución son los siguientes:
El objeto A definido por primera vez llama al constructor con parámetros, y el segundo objeto B se inicializa a través del objeto A, por lo que se llama al constructor de copia.
Pruébelo también en su computadora.
Es posible que tenga preguntas. Al principio mencionamos que si no definimos activamente un constructor de copia, se generará uno automáticamente, entonces, ¿por qué tenemos que definirlo nosotros mismos? Esto se debe a que el constructor de copias predeterminado solo realiza tareas simples. En algunos casos, pueden ocurrir problemas que involucran copia profunda y copia superficial . ¡Se lo presentaremos en detalle en la siguiente sección!