Recapitulando
Na última aula vimos que no C++ existem arrays unidimensionais e multidimensionais como na linguagem C. A novidade é que existe uma estrutura da armazenamento chamada vector que é semelhante a um array unidimensional, porém seu tamanho pode ser alterado.
Também vimos que a grande limitação de um array ou vector é que ele não permite diferentes tipos de dados em uma mesma estrutura. Para fugir dessa limitação temos as Structures.
O que são Structures?
Structures ou structs são estruturas de armazenamento de dados que agrupam diferentes variáveis dentro de si, permitindo diferentes tipos de dados nas mesma estrutura. Alias, a tradução de Structures é exatamente estrutura.
Sua forma de uso segue geralmente esse padrão:
Abaixo segue um exemplo de criação e uso de uma estrutura:
- #include <iostream>
- #include <string>
- using namespace std;
- int main() {
- struct {
- string nome;
- int nota;
- } aluno;
- aluno.nome = "Gabriel";
- aluno.nota = 10;
- cout <<"Nome: "<< aluno.nome << "\n";
- cout <<"Nota: "<< aluno.nota << "\n";
- return 0;
- }
Neste exemplo vimos que a estrutura se comporta como se fosse um objeto e as variáveis são utilizadas como se fosse um atributo, isto é, precisamos referenciar a estrutura para localizá-la como na linha 11: aluno.nome = "Gabriel";
Quando digo como se "fosse um objeto" é porque as structures também estão presentes na linguagem C e nela não existem classes e objetos. Exemplo de structures em C:
- #include <stdio.h>
- int main() {
- struct {
- char categoria;
- int preco;
- } faixa;
- faixa.categoria = 'A';
- faixa.preco = 100;
- printf("Categoria: ");
- printf("%c",faixa.categoria);
- printf("\nPreço: ");
- printf("%d",faixa.preco);
- return 0;
- }
Você também pode usar a structure para criar diferentes elementos utilizando a mesma estrutura, bastando listar os nomes desses elementos separados por vírgulas na última linha onde vai o nome da estrutura. Exemplo:
- #include <iostream>
- #include <string>
- using namespace std;
- int main() {
- struct {
- string nome;
- int nota;
- } aluno1,aluno2;
- aluno1.nome = "Gabriel";
- aluno1.nota = 10;
- cout <<"Nome: "<< aluno1.nome << "\n";
- cout <<"Nota: "<< aluno1.nota << "\n";
- aluno2.nome = "Pedro";
- aluno2.nota = 9;
- cout <<"Nome: "<< aluno2.nome << "\n";
- cout <<"Nota: "<< aluno2.nota << "\n";
- return 0;
- }
Apesar dessa flexibilidade é aconselhável utilizar um recurso chamado "estrutura nomeada" onde damos um nome para a structure e posteriormente criamos "n" objetos a partir dela como se fossem instâncias de uma classe. Exemplo:
- #include <iostream>
- #include <string>
- using namespace std;
- int main() {
- struct aluno {
- string nome;
- int nota;
- };
- aluno aluno1;
- aluno aluno2;
- aluno1.nome = "Gabriel";
- aluno1.nota = 10;
- cout <<"Nome: "<< aluno1.nome << "\n";
- cout <<"Nota: "<< aluno1.nota << "\n";
- aluno2.nome = "Pedro";
- aluno2.nota = 9;
- cout <<"Nome: "<< aluno2.nome << "\n";
- cout <<"Nota: "<< aluno2.nota << "\n";
- return 0;
- }
Uma das vantagens do uso de structures é que as variáveis por ela manipuladas ficam protegidas dentro da estrutura, não correndo o risco de ter seu valor conflitando com o valor de outras variáveis de mesmo nome.
Assim, a variável aluno1.nota armazena seu valor em um local e a variável aluno2.nota armazena seu valor em outro local. Na prática elas se comportam com duas variáveis diferentes. Se tivéssemos apenas uma variável nota, sem esse proteção, ela não poderia armazenar os dois valores.
Nessa aula vimos que as structures permitem armazenar diferentes tipos de dados e podem ser utilizadas tanto no C como no C++. Futuramente veremos como a POO do C++ trabalha com a criação de Classes e Objetos.
Referências
DEITEL, H. M. DEITEL, P. J. C++: Como programar. Pearson Education do Brasil. 2006.
GBDONLINE. Learn C++ Programming. Disponível em: <https://learn.onlinegdb.com/c%2B%2B_for_beginners> Acesso em 05 ago. 2024.
W3SCHOOLS. C++ Tutorial. Disponível em: <https://www.w3schools.com/cpp/default.asp> Acesso em 05 ago. 2024.