Ajude nosso projeto a se manter online.

structs: Como declarar, Acessar e Usar

 No tutorial anterior, aprendemos o que são e para que servem as structs, neste tutorial de C++ iremos colocar a mão na massa e aprender a usar essa estrutura de dados tão importante.


Como declarar uma struct em C++

Para usarmos uma struct, primeiros temos que declará-la. E fazemos isso assim:

struct name
{
   // declaração
   // de
   // variáveis
};

Ou seja, só escrever a palavra chave struct, dar um nome, abrir chaves, colocar todas as variáveis que deseja lá dentro e terminar com ponto-e-vírgula.

Vamos declarar uma como exemplo:

struct Student
{
   char name[50];
   float math,
         physics,
         science;
};

A struct acima é a Student, e ela armazena informações de algum estudante.
Essas informações são chamadas membros, e são as variáveis name (para armazenar o nome do estudante), math, physics e science (para armazenar as notas do estudante).

Agora podemos criar as instâncias do tipo Student:

  • Student NeilPeart;
  • Student BruceDickinson;

Ou seja, é como se declarássemos variáveis. A diferença é que 'NeilPeart' e BruceDickinson' não são do tipo int, float, double, char ou nenhum outro tipo base da linguagem C++, eles são do tipo 'Student'.

E que tipo de dado é esse?
Ora, é o tipo de dado que você criou! Você definiu sua própria estrutura, agora ela existe e pode ser instanciada quantas vezes você quiser.

Você pode inclusive instanciar quantas variáveis do tipo Student quiser, na forma de array:

  • Student students[30];

Prontinho. Aí tem 30 'variáveis' do tipo de dado Student, ou seja, são 30 structs, que podem ser usadas para representar 30 alunos de uma sala de aula.


Como acessar os membros de uma struct

Como dissemos, as variáveis empacotadas numa struct são chamadas de membros dessa estrutura, e para acessá-las basta usarmos o operador ponto: .

Por exemplo, para acessar o nome:

  • NeilPeart.name
  • BruceDickinson.name

As notas de Matemática são acessadas assim:

  • NeilPeart.math
  • BruceDickinson.math

Ou seja, acessamos as variáveis assim: nome_da_instancia.nome_da_variavel

Veja bem, não podemos acessar: Student.science
Pois "Student" é apenas um modelo, uma abstração, um molde para criar estruturas de dados, ela não existe na realidade, o que existe são suas instâncias, que criamos a partir dessa struct, ok?

Vamos criar um programa que usa essa struct, cria um instância de nome 'Lennon', preenche seus dados e depois exibe:

#include <iostream>
using namespace std;

struct Student
{
   char name[50];
   float math,
         physics,
         science;
};

int main()
{
    Student Lennon;

    cout<<"Nome: ";
    cin.get(Lennon.name,50);

    cout<<"Nota em Matemática: ";
    cin >> Lennon.math;

    cout<<"Nota em Física: ";
    cin >> Lennon.physics;

    cout<<"Nota em Ciências: ";
    cin >> Lennon.science;

    cout<<"\nDados:"<<endl;
    cout<<"Nome      : "<<Lennon.name<<endl;
    cout<<"Matemática: "<<Lennon.math<<endl;
    cout<<"Física    : "<<Lennon.physics<<endl;
    cout<<"Ciência   : "<<Lennon.science<<endl;

    return 0;
}

Como inicializar structs

No exemplo anterior, pedimos o input de  membro por membro da struct, pro usuário. Porém, isso não é obrigatório, assim como nas variáveis, você já pode declarar uma struct e ir inicializando ela, veja:

#include <iostream>
using namespace std;

struct Student
{
   char name[50];
   float math,
         physics,
         science;
};

int main()
{
    Student robert = {"Robert Plant", 9.5, 8.1, 9};

    cout<<"\nDados:"<<endl;
    cout<<"Nome      : "<<robert.name<<endl;
    cout<<"Matemática: "<<robert.math<<endl;
    cout<<"Física    : "<<robert.physics<<endl;
    cout<<"Ciência   : "<<robert.science<<endl;

    return 0;
}

Ou seja, basta abrir chaves e ir informando dado por dado, NA ORDEM que foi declarado na struct, ok?!

Você também pode inicializar apenas alguns membros, por exemplo:

  • Student robert = {"Robert Plant"};

No caso acima, só o membro 'name' vai ser inicializado.
No exemplo abaixo, os membros 'name' e 'math' que serão inicializados:

  • Student robert = {"Robert Plant", 9.5};

Os outros permanecem sem serem inicializados.

Nenhum comentário:

Postar um comentário