Programar em C++/Estruturas: diferenças entre revisões

[edição verificada][revisão pendente]
Conteúdo apagado Conteúdo adicionado
m <source> -> <syntaxhighlight> (phab:T237267)
Linha 14:
Para criar um tipo de dados composto heterogêneo, basicamente, cria-se uma lista de tipos e nomes de variáveis separadas por ponto e vírgula. Podemos imaginar esta lista como um bloco de código, em linguagem C, onde estão presentes apenas as declarações de variáveis. Para isso temos a seguinte sintaxe:
 
<sourcesyntaxhighlight lang=cpp>
struct Estrutura
{
Linha 29:
 
} [<NomeVariavelComposta>];
</syntaxhighlight>
</source>
 
O nome da variável composta pode ser omitido na declaração da estrutura e depois definido onde for mais apropriado, geralmente, dentro de algum bloco de código onde venha a ser usado. Podemos ver logo abaixo, o exemplo de uma declaração de estrutura:
 
<sourcesyntaxhighlight lang=cpp>
struct Estrutura
{
Linha 49:
return 0;
}
</syntaxhighlight>
</source>
 
=== Acessando dados internos ===
Linha 55:
O modo de acesso a variáveis internas de uma estrutura é feito através do operador ponto ".", porém, quando usamos ponteiros para guardar o endereço de uma estrutura usamos o operador seta "->". Vejamos um pequeno trecho de código:
 
<sourcesyntaxhighlight lang="cpp">
Estrutura st;
Estrutura *pst;
Linha 64:
pst->PontoFlutuante = 23.976;
</syntaxhighlight>
</source>
 
== Estruturas em C++ ==
Linha 71:
 
Em C, para criar uma estrutura de dados chamada '''st''', declaramos:
<sourcesyntaxhighlight lang="C">
struct Estrutura st;
</syntaxhighlight>
</source>
 
Para fazer o mesmo em C++, declaramos:
<sourcesyntaxhighlight lang="cpp">
Estrutura st;
</syntaxhighlight>
</source>
 
 
Linha 89:
 
Se escrevermos o código:
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
#include <string>
Linha 107:
return 0;
}
</syntaxhighlight>
</source>
 
O resultado é:
Linha 119:
 
Podemos ter um construtor sem argumentos que ao contrário do construtor defaut designa valores padrões às variáveis membro.
<sourcesyntaxhighlight lang="cpp">
struct Person
{
Linha 130:
}
};
</syntaxhighlight>
</source>
 
*O nome do construtor é sempre igual ao nome da estrutura, sem exceção.
Linha 136:
 
Refazendo o nosso exemplo
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
#include <string>
Linha 157:
return 0;
}
</syntaxhighlight>
</source>
 
Repare que demos valores padrões ás variáveis. Agora não estamos no caso de ter p1.name=???
Linha 166:
Termos um construtor sem argumentos é um melhoramento face ao construtor defaut pois agora temos valores padrões para as variáveis membro.
Porém seria melhor se conseguíssemos inicializar as variáveis membro com valores dados pelo utilizador enquanto o programa estivesse sendo executado. E realmente podemos fazer se passarmos argumentos.
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
#include <string>
Linha 201:
return 0;
}
</syntaxhighlight>
</source>
 
 
Linha 207:
 
;Separar o construtor prototype da implementação
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
#include <string>
Linha 246:
return 0;
}
</syntaxhighlight>
</source>
 
* Vamos ver a função main(): declaramos 2 variáveis uma float e outra string. Pedimos para a pessoa escrever o nome e colocamos o valor na variável string, depois pedimos a altura e colocámos na variável float. Depois chamamos o construtor com dois argumentos e passamos as variáveis anteriores como argumentos. Por fim mandamos imprimir os valores das variáveis membro da estrutura.
* Repare que para definirmos fora o construtor recorremos ao operador scope ::
<sourcesyntaxhighlight lang="cpp">
Person::Person()
Person::Person(string s, int h)
</syntaxhighlight>
</source>
* Repare que no prototype dos construtor apenas tivemos de dizer o tipo dos parâmetros