English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá C ++Você aprenderá o que é um construtor, como criá-lo e como o C ++do tipo de construtor.
O construtor é um tipo especial de função membro, que é executado durante a criaçãoobjetoserá inicializado automaticamente.
O compilador identifica a função membro dada pelo seu nome e tipo de retorno como construtor.
O construtor tem o mesmo nome da classe e não possui tipo de retorno. Além disso, o construtor sempre é público.
... .. ... class temporary { private: int x; float y; public: // construtor temporary(): x(5), y(5.5) { // Corpo do construtor } ... .. ... }; int main() { Temporary t1; ... .. ... }
O programa acima mostra o construtor definido, sem tipo de retorno e com o nome igual à classe.
No código acima, temporary() é um construtor.
Ao criar um objeto da classe, o construtor temporário será automaticamente chamado e x será inicializado como5e, em seguida, y inicializa-se5.5.
Você também pode inicializar os membros de dados do construtor da seguinte forma. No entanto, não é recomendado usar esse método.
temporary() { x = 5; y = 5.5; } // Esse método não é o preferido.
Supondo que você esteja lidando10zero objeto Person e o valor padrão do membro de dados age é 0. Inicializar manualmente todos os objetos será uma tarefa muito tediosa.
Ao contrário, você pode definir um construtor que inicializa age como 0. Então, tudo o que você precisa fazer é criar um objeto Person, o construtor inicializará automaticamente age.
Esses casos ocorrem frequentemente ao lidar com arrays de objetos.
Além disso, se você quiser executar algum código imediatamente após a criação do objeto, você pode colocar o código no corpo do construtor.
calcule e mostre a área do retângulo.
#include <iostream> using namespace std; class Área { private: int comprimento; int largura; public: // construtor Area(): comprimento(5), largura(2}{ void GetLength() { cout << "Informe respectivamente o comprimento e a largura: "; cin >> comprimento >> largura; } int AreaCalculation() { * breadth);} void DisplayArea(int temp) { cout << "Área: " << temp; } }; int main() { Área A1, A2; int temp; A1.GetLength(); temp = A1.AreaCalculation(); A1.DisplayArea(temp); cout << endl << "A área padrão quando não obtém valores do usuário é:" << endl; temp = A2.AreaCalculation(); A2.DisplayArea(temp); return 0; }
Neste programa, crie a classe Area para lidar com funções de área. Ela tem dois membros de dados length e breadth.
definiu uma inicialização de length5e breadth para2o construtor.
também temos três funções membro adicionais GetLength(), AreaCalculation() e DisplayArea(), que respectivamente obtêm o comprimento do usuário, calculam a área e mostram a área.
ao criar o objeto A1e A2devido à relação do construtor, os comprimentos (length) e larguras (breadth) desses dois objetos são inicializados respectivamente para5e2.
em seguida, chame o membro da função GetLength(), que obtém o objeto A1os valores do comprimento (length) e largura (breadth). Isso muda o objeto A1o comprimento (length) e a largura (breadth).
em seguida, chame a função AreaCalculation() para calcular o objeto A1a área e armazene em uma variável temp, finalmente, mostre-a.
Para o objeto A2não requer que o usuário forneça quaisquer dados. Portanto, o comprimento (length) e a largura (breadth) são mantidos5e2.
em seguida, calcule e exiba A2a área é10.
Resultados de saída
informar respectivamente o comprimento e a largura: 6 7 Área: 42 área padrão quando não obtém valores do usuário é: Área: 10
O construtor também pode ser semelhante asobre a sobrecarga de funções.modo de sobrecarga.
A sobrecarga do construtor tem o mesmo nome (o nome da classe), mas o número de parâmetros é diferente.
De acordo com o número e o tipo dos parâmetros passados, será chamado o construtor específico.
Devido à existência de vários construtores,也应no momento da criação do objeto,也应passar os parâmetros do construtor.
// Demonstração de código da função de trabalho do construtor sobrecarregado #include <iostream> using namespace std; class Área { private: int comprimento; int largura; public: // construtor sem parâmetros Area(): comprimento(5), largura(2{ // existe um construtor com dois parâmetros Area(int l, int b): comprimento(l), largura(b){} void GetLength() { cout << "Digite respectivamente o comprimento e a largura: "; cin >> comprimento >> largura; } int AreaCalculation() { return comprimento * largura;} void DisplayArea(int temp) { cout << "Área: " << temp << endl; } }; int main() { Área A1, A2(2, 1); int temp; cout << "Área padrão quando não há parâmetros passados." ; temp = A1.AreaCalculation(); A1.DisplayArea(temp); cout << "("2,1quando passado como parâmetro. temp = A2.AreaCalculation(); A2.DisplayArea(temp); return 0; }
Para o objeto A1ao criar o objeto sem passar nenhum parâmetro.
Portanto, será chamado o construtor sem parâmetros, que inicializa o comprimento (length) como5a largura (breadth) inicializada será2Portanto, o objeto A1a área será10.
Para o objeto A2ao criar o objeto.2e1como parâmetro.
Portanto, será chamado o construtor com dois parâmetros, que inicializa o comprimento (length) como l (no caso,2e inicializar a largura (breadth) como b (no caso,1Portanto, o objeto A2a área será2.
Resultados de saída
Área padrão quando não há parâmetros passados. Área: 10 (2,1quando passado como parâmetro. Área: 2
Um objeto pode ser inicializado com outro objeto do mesmo tipo. Isso é semelhante a copiar o conteúdo de uma classe para outra classe.
No programa acima, se você quiser inicializar um objeto A3para que ele contenha os mesmos valores que A2Para executar com os mesmos valores, você pode fazer assim:
.... int main() { Área A1, A2(2, 1); // copiar A2copiar o conteúdo para A3 Área A3(A2); OU Área A3 = A2; }
Você pode pensar que precisa criar um novo construtor para executar essa tarefa. Mas, não é necessário um construtor adicional. Isso porque, por padrão, o construtor de cópia já está embutido em todos os classes.