Quando chamamos um construtor de cópia?
Na linguagem de programação C ++, podemos chamar uma função de cópia nas seguintes situações. É chamado quando retornamos um objeto da classe pelo valor. Um construtor de cópia também é recomendado para ser usado na condição quando passamos um objeto da classe por um valor como um parâmetro quando criamos um objeto criado, dependendo do outro objeto pertencente à mesma classe.
Tipos de um construtor de cópia
Existem dois tipos de construtores de cópias.
Copy Constructor (padrão)
Se o usuário não definir nenhum construtor de cópia, neste caso, o compilador fornece seu construtor.
Construtor definido pelo usuário
O programador sempre define o construtor definido pelo usuário.
Quando precisamos de um construtor de cópia?
Se nosso construtor de cópias não estiver definido, o compilador C ++ cria o construtor de cópias que é o padrão. Precisamos definir nosso construtor quando um objeto usa ponteiros, alocação de memória dinâmica ou outros recursos.
Sintaxe
Name_of_class (const name_of_class & object_name)Depois de usar o construtor de cópias, obtemos duas cópias. Um é conhecido como uma cópia rasa, enquanto o segundo é uma cópia profunda. A cópia rasa é produzida pelo construtor de cópia padrão. Enquanto o construtor de cópias profundas aloca a memória automaticamente, ele copia o valor real. Os valores copiados e reais são armazenados em diferentes lugares dentro da memória. Dizem que é necessária uma cópia profunda ao criar um construtor definido pelo usuário.
Implementação de um construtor de cópia
Implementamos o código no editor de texto do Ubuntu, e o valor resultante é obtido por execução no terminal Linux.
Este programa usará o conceito de programação orientado a objetos, pois os construtores são usados para fazer aulas. Uma classe é criada com a parte privada com valores do tipo inteiro. Na parte pública, um construtor é criado com o nome da classe. Este construtor usará dois valores no parâmetro para receber o valor passado do programa principal. Dentro do construtor, os valores enviados são atribuídos às novas variáveis.
Após o construtor, novamente, um novo construtor é criado. É um construtor copiado. Como descrevemos acima, este construtor pega o nome da classe e o objeto criado.
Em seguida, usamos duas funções, getx () e get (), que retornarão o valor das variáveis. No programa principal, os construtores são chamados usando o nome da classe, cada um (original), e o construtor de cópias contém argumentos no parâmetro enquanto chama. O construtor normal contém dois valores que são passados para a variável. E o construtor de cópias é atribuído com o objeto da primeira classe. Para exibir o valor resultante, chamaremos a função Get usando objetos de ambos os construtores.
Vamos salvar o código e executá -lo usando o compilador G++.
Na execução do código -fonte, você pode ver que ambos os valores são os mesmos que os construtores passados do original ou pelo construtor de cópias.
Conceito de lista vinculada em C++
Uma lista vinculada é uma estrutura de dados que contém vários nós conectados através dos endereços armazenados em cada nó.
Nó da estruturaCriamos uma estrutura com uma parte de dados que armazena os valores nela e a próxima parte que armazena o endereço do nó adjacente. O próximo passo que fazemos é inicializar os nós no programa principal. Todos os nós são declarados como nulos usando os ponteiros.
Cada parte de dados do nó é atribuída pelos valores. Isso é feito acessando essa parte do nó.
Um -> dados = 1;Da mesma forma, todos os nós recebem seus dados relevantes.
A principal coisa da lista vinculada é a conexão entre os nós criados. Isso é feito quando a próxima parte de um nó é atribuída com o endereço do segundo nó; Da mesma forma, o segundo nó contém o endereço do terceiro. E assim por diante, esse processo continua até o último nó. A próxima parte do último nó é declarada nula, pois não há mais nó aqui.
O construtor de cópias e a lista vinculada em C++
Para usar um construtor de cópias na lista vinculada, usamos uma estrutura para criar o nó. Depois de fechar a estrutura, uma classe com o nome Linked_list é usada aqui. A peça privada conterá as variáveis de uma cabeça do tipo ponteiro e uma cauda. Um construtor normal atribui os valores às partes da cabeça e da cauda na parte pública.
Duas variáveis do tipo inteiro aceitarão os valores que serão enviados do programa principal, criando o objeto. Essas variáveis são atribuídas às variáveis de cabeça e cauda para armazenar valores. Após o construtor normal, um construtor de cópia é declarado. Isso será do mesmo nome, e seu parâmetro conterá um nome de classe constante com o objeto. Este construtor também é atribuído com os mesmos valores. Mas estes são acessados com os objetos. Obteremos esses valores usando a função get (). Ambos os valores na variável serão retornados.
Após o construtor, uma função simples de adicionar um nó ao nó existente é usada. Um novo nó de nome temp é criado. A parte dos dados é atribuída com o valor. E a próxima parte é declarada como nula. Aqui verificamos se o nó adicionado é o primeiro ou a lista vinculada já contém um nó nele. Portanto, uma declaração if-else é usada aqui. Ele verificará se a cabeça é igual a nulo, então a cabeça e a cauda são atribuídos o valor de "tmp". Mas em outro caso, se não forem nulos, a próxima parte da cauda será atribuída com o endereço de um novo nó. Isso significa que "tmp" conterá o endereço da cauda. E a cauda será atualizada o valor.
Agora no programa principal, criaremos o objeto da classe; Ao criar o objeto, os construtores são chamados. O construtor original e o cópia conterão os valores dos parâmetros. O construtor de cópias cria o objeto e é atribuído com o objeto do construtor original.
Esses valores serão exibidos. Para ver o valor resultante, execute o programa no terminal. Você pode ver que ambos o construtor têm os mesmos valores.
Conclusão
Este artigo explica o trabalho e a criação de um construtor de cópias na lista vinculada usando C++. Isso é feito explicando o construtor de cópias, seus tipos e uso em um programa simples demonstrado no exemplo. Além disso, o conceito de criação de lista vinculada também é explicado. Um exemplo combinado de uma lista vinculada com o construtor de cópias é usado para limpar todas as ambiguidades do usuário final.