construtor de cópia
Em C++, uma função com o mesmo nome do nome da classe e cujos parâmetros formais são tipos de referência de objetos desta classe é chamada de construtor de cópia . Assim como o construtor, o sistema irá gerar um automaticamente quando não o definirmos ativamente. execute atribuições simples correspondentes entre dois membros do objeto, usadas para inicializar um objeto, como a seguinte situação:
#include<iostream>usingnamespacestd;#definePI3.1415classCircle{private:doubleR;public:Circle(doubleR);Circle(Circle&A);doublearea();doublegirth();};Circle::Circle(doubleR){cout<<Construtor <<endl;this->R=R;}Circle::Circle(Circle&A){cout<<CopyConstructor<<endl;this->R=AR;}doubleCircle::area(){returnPI*R*R;} doubleCircle::girth(){return2*PI*R;}intmain(){CircleA(5);CircleB(A);return0;}
Neste exemplo, uma classe Circle é definida e um construtor com parâmetros e um construtor de cópia são definidos respectivamente. Em seguida, o objeto A é definido na função principal, o valor inicial é passado e o construtor com parâmetros é chamado. E defina o objeto B e inicialize o objeto B por meio do objeto A. Os resultados da execução são os seguintes:
O objeto A definido pela primeira vez chama o construtor com parâmetros, e o segundo objeto B é inicializado através do objeto A, então o construtor de cópia é chamado.
Experimente também no seu computador.
Você pode ter dúvidas. No início mencionamos que se não definirmos ativamente um construtor de cópia, um será gerado automaticamente para nós, então por que temos que defini-lo nós mesmos? Isso ocorre porque o construtor de cópia padrão executa apenas atribuições simples. Em alguns casos, podem ocorrer problemas. Isso envolve cópia profunda e cópia superficial .