Ir para conteúdo
Entre para seguir isso  
Dark Skyllen

#6 - Struct e Enums

Recommended Posts

Dark Skyllen    7
Dark Skyllen

Aula 6

 

 

 

  • Struct e Enums

 

Nessa aula iremos aprender a funcionalidade dos structs e dos enums. Vamos começar pelo enum que é prático, simples e mais fácil do que o struct.

 

 

Enums:

 

Também conhecida por constantes enumeradas, elas armazerão uma coleção de constantes que poderão depois ser chamada e passarem a ser um "tipo de variável".

Como exemplo, podemos ver como usar o enum nos dias da semana:

 

enum Dias da semana

{

 

Segunda,

Terca,

Quarta,

Quinta,

Sexta,

Sabado,

Domingo

 

};

Ao criarmos esse enum, não definimos nenhum valor inicial, o que será jogado por default como:

 

Segunda = 0

Terca = 1

Quarta = 2

Quinta = 3

Sexta = 4

Sabado = 5

Domingo = 6

 

 

Também podemos definir os valores das constantes:

 

enum Dias da semana

{

 

Segunda = 4

Terca,

Quarta,

Quinta = 10

Sexta,

Sabado,

Domingo

 

};

Os valores das constantes, nesse caso, seriam:

 

Segunda = 4

Terca = 5

Quarta = 6

Quinta = 10

Sexta = 11

Sabado = 12

Domingo = 13

 

 

Agora que vimos como declará-las e sobre seu funcionamente, vamos colocar em prática:

 

#include <iostream.h>

 using namespace std;

 enum diasDaSemana
 {
  Segunda,
  Terca,
  Quarta,
  Quinta,
  Sexta,
  Sabado,
  Domingo    
 };

 int main()
 {
     int numDigitado;
     diasDaSemana dia; // Declara uma variável do tipo dias da semana.
     char nomeDia;

   cout << "Digite um número de 0 à 6: " << endl;
   cin >> numDigitado;
   dia = diasDaSemana(numDigitado);
   cout << "Você escolheu: ";

   switch (dia) // Fizemos o case para ele mostrar o nome do dia e não o numero.
   {
     case Segunda: cout << "Segunda" << endl; break;
     case Terca: cout << "Terca" << endl; break;
     case Quarta: cout << "Quarta" << endl; break;
     case Quinta: cout << "Quinta" << endl; break;
     case Sexta: cout << "Sexta" << endl; break;
     case Sabado: cout << "Sabado" << endl; break;
     case Domingo: cout << "Domingo" << endl; break;

     default: cout << "Erro .. " << endl; break;
 }


   system("pause>null");


 }

No exemplo acima, pedimso para o usuário digitar um número e criamos uma variável do tipo enum diasDaSemana. Com o numero digitado em mãos, mostramos o dia da semana.

Bom, enums é isso.. Não há muito o que falar. Então, vamos para struct!

 

 

 

Struct:

 

Structs são um pouquinho mais complicado pois irá englobar várias coisas que aprendemos até aqui. Principalmete o conceito de funções. Se você não leu a Aula 5 ainda, recomendo que leiam.

O struct é um grupo de dados que diferentemente do array podem conter valores diferentes. Em um array, poderiamos receber apenas valores do tipo que declaramos o array, no struct não, podemos criar

várias variáveis que receberão diversos valores e de uma maneira muito mais prática de se trabalhar.

 

Declarando um struct (lembrando que a declaração é feita sempre antes da função main()):

 

struct cliente //Declaração do struct

{

string nome;

int codigo;

float saldo;

 

}; //Fim da declaração.

Não há muito o que explicar, mas cliente engloba variáveis (nome, codigo e saldo) que são próprias de X cliente e que podem ser modificadas durante o uso do programa.

 

 

 

Vamos por struct em prática:

 

#include <iostream.h>

 using namespace std;

 struct cliente //Declaração do struct
 {
   string nome;
   int codigo;
   float saldo;      

 }; //Fim da declaração.

 int main()
 {
  //Declara uma variável do tipo struct cliente:
    struct cliente Guilherme;
  //Atribui valores à essa variavel:
   Guilherme.nome = "Guilherme Santa Chiara";
   Guilherme.codigo = 1;
   Guilherme.saldo = 178.9;
  // Termina atribuições:

  // Exibindo os dados do cliente:

   cout << "Nome: " << Guilherme.nome << endl
        << "Codigo: " << Guilherme.codigo << endl
        << "Saldo: " << Guilherme.saldo << endl;

   system("pause>null");


 }

 

Trabalhando Struct com Funções:

 

 

 

 

 

#include <iostream.h>

 using namespace std;

 struct cliente //Declaração do struct
 {
   string nome;
   int codigo;
   float saldo;      

 }; //Fim da declaração.

 // "Esboço" da função
 void exibirCliente(cliente _cliente);
 void alteraSaldo(cliente _cliente, float _newSaldo);

 int main()
 {
  //Declara uma variável do tipo struct cliente:
    struct cliente Guilherme;
  //Atribui valores à essa variavel:
   Guilherme.nome = "Guilherme Santa Chiara";
   Guilherme.codigo = 1;
   Guilherme.saldo = 178.9;
  // Termina atribuições:

  // Exibindo os dados do cliente:
  cout << "Antes de alterar saldo: " << endl;            
  exibirCliente(Guilherme);
  cout << "Depois de alterar saldo (?) : " << endl;
  alteraSaldo(Guilherme, 4000.);
  exibirCliente(Guilherme);

   system("pause>null");


 }

 void exibirCliente(cliente _cliente)
 {
   cout << "Nome: " << _cliente.nome << endl
        << "Codigo: " << _cliente.codigo << endl
        << "Saldo: " << _cliente.saldo << endl;
 }

 void alteraSaldo(cliente cliente, float _newSaldo)
 {
      cliente.saldo = _newSaldo;
      return;  
 }

Compile e execute o programa acima e verá que conterá erros! Quando passamos um valor para uma função, essa cria uma cópia do argumento que só pode ser usada localmente e não altera a estrutura do struct.

Para a próxima aula, fica como exercício pesquisarem como corrigir isso.

 

Abraços, até a próxima aula!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket

Mano, as aulas estão ficando muito boas. Continue assim creio que está ajudando muitas pessoas.

@off

Ai porque não gosto de c/c++ naquele primeiro exemplo seu é um peteco de linha pra fazer isso:

local diasDaSemana = {
                    [0] = 'Segunda',
                    'Terça',
                    'Quarta',
                    'Quinta',
                    'Sexta',
                    'Sábado',
                    'Domingo',
}
local n =  2
print('Você escolheu: '.. diasDaSemana[n])

Claro que em Lua tem que especificar antes e talz mas tá XD

De qualquer geito sem C/C++ o mundo não existia. Como alguns dizem: O C foi feito em C.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dark Skyllen    7
Dark Skyllen

@Socket

 

Da pra fazer algo parecido sim, fiz desse jeito só pra explicar mais simplificadamente.

Dei o conceito, a utilização vai depender do aluno :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
dragonlorde    0
dragonlorde

Disculpa pelo double post mas precisava muito postar isso! :coolface:

[spoiler=Resolvido!]

#include <iostream>

 using namespace std;

 struct cliente //Declaração do struct
 {
   string nome;
   int codigo;
   float saldo;      

 }; //Fim da declaração.

 // "Esboço" da função
 void exibirCliente(cliente _cliente);
 void alteraSaldo(cliente*);

 int main()
 {
  //Declara uma variável do tipo struct cliente:
    struct cliente Guilherme;
  //Atribui valores à essa variavel:
   Guilherme.nome = "Guilherme Santa Chiara";
   Guilherme.codigo = 1;
   Guilherme.saldo = 178.9;
  // Termina atribuições:

  // Exibindo os dados do cliente:
  cout << "Antes de alterar saldo: " << endl;            
  exibirCliente(Guilherme);
  cout << "Depois de alterar saldo (?) : " << endl;
  alteraSaldo(&Guilherme);
  exibirCliente(Guilherme);

   system("pause>null");


 }

 void exibirCliente(cliente _cliente)
 {
   cout << "Nome: " << _cliente.nome << endl
        << "Codigo: " << _cliente.codigo << endl
        << "Saldo: " << _cliente.saldo << endl;
 }

 void alteraSaldo(cliente* Cliente)
 {
      Cliente->saldo = 400.0;
      return;  
 }  

 

 

Resolvi com ponteiros o problema do script acima ;)

 

 

Obs: Se quiser pode deletar o post de cima XD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×