prof.: josé eustáquio rangel de queiroz [email protected] rangeldequeiroz@gmail

31
DSC/CCT/UFCG {joseana, rangel}@dsc.ufcg.edu.br Carga Horária: 60 horas Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected]

Upload: jacie

Post on 07-Jan-2016

47 views

Category:

Documents


5 download

DESCRIPTION

Structs, Unions e. Enums em C e C++. Técnicas de Programação. Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected]. Carga Horária: 60 horas. Tópicos. Structs Unions Enums. Structs I. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

DSC/CCT/UFCGDSC/CCT/UFCG

{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

Carga Horária: 60 horasCarga Horária: 60 horas

Prof.: José Eustáquio Rangel de Queiroz

[email protected]@gmail.com

Prof.: José Eustáquio Rangel de Queiroz

[email protected]@gmail.com

Page 2: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

2{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Structs Unions Enums

Structs Unions Enums

TópicosTópicos

Page 3: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

3{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Arrays Exigência de todostodos os elementos do mesmomesmo tipo de dados

Fatos Necessidade de agrupamento de

informações envolvendo diferentesdiferentes tipos de dados Exemplo Lista de materiais de um

almoxarifado Inclusão do nome, especificação,

quantidade disponível e datas de entrada e de saída de cada item

Arrays Exigência de todostodos os elementos do mesmomesmo tipo de dados

Fatos Necessidade de agrupamento de

informações envolvendo diferentesdiferentes tipos de dados Exemplo Lista de materiais de um

almoxarifado Inclusão do nome, especificação,

quantidade disponível e datas de entrada e de saída de cada item

StructsStructs IStructsStructs I

Page 4: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

4{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Fatos Possibilidade de estruturação de dados

em CC and C++C++ de modo a armazenar combinações de caracteres, inteiros, variáveis de ponto flutuante and e dados do tipo enumerado (enumenum) Uso de structsstructs

Fatos Possibilidade de estruturação de dados

em CC and C++C++ de modo a armazenar combinações de caracteres, inteiros, variáveis de ponto flutuante and e dados do tipo enumerado (enumenum) Uso de structsstructs

StructsStructs IIStructsStructs II

Page 5: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

5{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructStruct Tipo derivado de dados composto de

membros associados a tipos de dados elementares ou derivados

StructStruct Única Armazenamento dos dados associados a

um objeto

Array de structsstructs Armazenamento dos dados associados a

vários objetos 

StructStruct Tipo derivado de dados composto de

membros associados a tipos de dados elementares ou derivados

StructStruct Única Armazenamento dos dados associados a

um objeto

Array de structsstructs Armazenamento dos dados associados a

vários objetos 

StructsStructs IIIStructsStructs III

Page 6: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

6{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructsStructs IVStructsStructs IV

Declaração de Structs Structs Declaração de Structs Structs

SemSem Alocação de EspaçoAlocação de Espaço ComCom Alocação de EspaçoAlocação de Espaço

structstruct Exemplo01 Exemplo01{{ charchar nome[40] nome[40];; charchar espec[80] espec[80];; intint quant quant;;}} ;;

structstruct Exemplo01Exemplo01{{ charchar nome[40] nome[40];; charchar espec[80] espec[80];; intint quant quant;;}} Almoxarifado;Almoxarifado;

Page 7: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

7{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructsStructs IVStructsStructs IV

Tipos de Dados definidos pelo Usuário (TypedefTypedef)

TypedefTypedef Facilidade de criação de sinônimos para

nomes de tipos de dados predefinidos  

typedef int Quantidade;typedef int Quantidade;

(QuantidadeQuantidade torna-se sinônimo do tipo intint)

Quantidade q1, q2;Quantidade q1, q2;Quantidade quant[20];Quantidade quant[20];

Tipos de Dados definidos pelo Usuário (TypedefTypedef)

TypedefTypedef Facilidade de criação de sinônimos para

nomes de tipos de dados predefinidos  

typedef int Quantidade;typedef int Quantidade;

(QuantidadeQuantidade torna-se sinônimo do tipo intint)

Quantidade q1, q2;Quantidade q1, q2;Quantidade quant[20];Quantidade quant[20];

Page 8: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

8{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructsStructs VStructsStructs V

Typedef Typedef e Struct Struct Uso combinado Declaração de um

sinônimo (ou codinome) para uma structstruct

Typedef Typedef e Struct Struct Uso combinado Declaração de um

sinônimo (ou codinome) para uma structstruct

typedef struct typedef struct /* Definicao de uma estrutura *//* Definicao de uma estrutura */{{ int int num_item;num_item; char char nome_item[30];nome_item[30]; char char espec_item[60] ;espec_item[60] ;} } Estrutura;/* Codinome da struct */Estrutura;/* Codinome da struct */

  Estrutura est1; /* Criação de uma variavel doEstrutura est1; /* Criação de uma variavel dotipo Estrutura */ tipo Estrutura */

Page 9: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

9{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructsStructs VIStructsStructs VI

Acesso a membros de uma Struct Struct Uso do operador pontoponto (..)

  EstruturaEstrutura..num_item;num_item; 

Uso do operador setaseta (->->)

  struct Estrutura *Apont = &num_item;struct Estrutura *Apont = &num_item;  Apont Apont ->-> num_item; num_item;

  (Equivalente a (*Apont)(*Apont)..num_item;num_item;)  

Acesso a membros de uma Struct Struct Uso do operador pontoponto (..)

  EstruturaEstrutura..num_item;num_item; 

Uso do operador setaseta (->->)

  struct Estrutura *Apont = &num_item;struct Estrutura *Apont = &num_item;  Apont Apont ->-> num_item; num_item;

  (Equivalente a (*Apont)(*Apont)..num_item;num_item;)  

Page 10: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

10{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructsStructs VIIStructsStructs VII

Exemplo 01 (1/2) Exemplo 01 (1/2)

#include <stdio.h> #include <stdio.h> struct struct TecProgTecProg /* Criacao de uma struct sem alocacao de espaco *//* Criacao de uma struct sem alocacao de espaco */ { long { long mat;mat; float float nota;nota; } ;} ;struct struct identidade /* Criacao de uma segunda struct que inclui aidentidade /* Criacao de uma segunda struct que inclui aprimeira */primeira */ { char { char nome[40];nome[40]; struct struct TecProg aluno;TecProg aluno; } ; } ;

Page 11: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

11{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

StructsStructs VIIIStructsStructs VIII

Exemplo 01 (2/2) Exemplo 01 (2/2)

void main ( )void main ( ){{ struct struct identidade aluno1 = {“Alberto Pontes"},identidade aluno1 = {“Alberto Pontes"}, *apont = &aluno1 ;*apont = &aluno1 ;

aluno1.aluno.mat = 20411032;aluno1.aluno.mat = 20411032; aluno1.aluno.nota = 7.8 ;aluno1.aluno.nota = 7.8 ; printf printf ("%s %ld %f\n", aluno1.nome, aluno1.TecProg.id,("%s %ld %f\n", aluno1.nome, aluno1.TecProg.id, aluno1.TecProg.nota) ;aluno1.TecProg.nota) ; printf printf ("%s %ld %f\n", apont->nome, apont->aluno.id,("%s %ld %f\n", apont->nome, apont->aluno.id, apont->TecProg.nota) ;apont->TecProg.nota) ; return 0;return 0;} }

Page 12: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

12{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions IUnionsUnions I

Union Union I

Declaração de um tipo de união e/ou de uma variável de um tipo de união

Sintaxe

union [etiqueta]union [etiqueta]{{

lista_de_membroslista_de_membros} [declaradores];} [declaradores];

Union Union I

Declaração de um tipo de união e/ou de uma variável de um tipo de união

Sintaxe

union [etiqueta]union [etiqueta]{{

lista_de_membroslista_de_membros} [declaradores];} [declaradores];

Page 13: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

13{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions IIUnionsUnions II

Union Union II

Definição do tipo de dados pelo usuário

Possibilidade de armazenamento de valores de diferentes tipos em diferentes instantes do processamento

Similaridade com uma structstruct, exceto pelo fato de todostodos os membros ocuparem a mesmamesma locação de memória

Possibilidade de contenção de apenas apenas umum dos membros de cada vez

Tamanho Função do maior membro

Union Union II

Definição do tipo de dados pelo usuário

Possibilidade de armazenamento de valores de diferentes tipos em diferentes instantes do processamento

Similaridade com uma structstruct, exceto pelo fato de todostodos os membros ocuparem a mesmamesma locação de memória

Possibilidade de contenção de apenas apenas umum dos membros de cada vez

Tamanho Função do maior membro

Page 14: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

14{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions IIIUnionsUnions III

Exemplo 02 Exemplo 02

union union Exemplo02 /* Declaracao de um tipo union */Exemplo02 /* Declaracao de um tipo union */{{ char char caractere;caractere; int int inteiro;inteiro; long long int_longo;int_longo; float float pto_flut;pto_flut; double double dupla_prec;dupla_prec;} } TipoUniao; /* Declaracao opcional da variavel union */TipoUniao; /* Declaracao opcional da variavel union */

Page 15: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

15{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions IVUnionsUnions IV

Exemplo 03 Exemplo 03

typedef uniontypedef union {{ intint intval; intval; floatfloat realval; realval;} } inteiro_ou_real;inteiro_ou_real;

inteiro_ou_realinteiro_ou_real num; num;num.intval = 3; /* x como variavel int */num.intval = 3; /* x como variavel int */num.realval = 3.1416; /* x como variavel float sobrescrevenum.realval = 3.1416; /* x como variavel float sobrescreveo valor int */o valor int */

Page 16: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

16{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions VUnionsUnions V Exemplo 04 - Combinação de unionunion e

struct struct (1/3) Exemplo 04 - Combinação de unionunion e

struct struct (1/3) union union situacaosituacao{{ int int col;col; char char grau[4];grau[4];}};;

struct struct selecaoselecao{{ long long inscr;inscr; float float nota;nota; union union situacao nivel;situacao nivel;}};;

struct struct identidadeidentidade{{ char char nome[40];nome[40]; struct struct selecao candidato;selecao candidato; }}; ;

Page 17: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

17{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions VIUnionsUnions VI Exemplo 04 - Combinação de unionunion e

struct struct (2/3) Exemplo 04 - Combinação de unionunion e

struct struct (2/3) intint main( ) main( ){{ struct struct identidade cand2 = {“Álvaro Guedes"},identidade cand2 = {“Álvaro Guedes"}, *apont = &cand2 ;*apont = &cand2 ;

cand2. cand2. candidatocandidato.inscr = 20411038;.inscr = 20411038; cand2. cand2. candidatocandidato.nota = 5.7;.nota = 5.7; printf (printf (“Digite status do candidato (A ou R)\n"“Digite status do candidato (A ou R)\n"));; scanfscanf (("%c", &A_R"%c", &A_R));; ifif ((A_R == ‘A'A_R == ‘A')) {{ printfprintf ((“Digite colocacao (inteiro de 1 a 40)\n"“Digite colocacao (inteiro de 1 a 40)\n"));; scanfscanf (("%d", &cand2.candidato.nivel.col"%d", &cand2.candidato.nivel.col));; printfprintf (("%s eh nivel %d\n”, cand2.nome,"%s eh nivel %d\n”, cand2.nome, cand2.candidato.nivel.colcand2.candidato.nivel.col));; }} /* Fim do if */ /* Fim do if */

Page 18: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

18{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

UnionsUnions VIIUnionsUnions VII Exemplo 04 - Combinação de unionunion e

struct struct (3/3) Exemplo 04 - Combinação de unionunion e

struct struct (3/3)

else else { printf ({ printf (“Digite o grau (Ms ou Gr\n"“Digite o grau (Ms ou Gr\n"));; scanf (scanf ("%s", &cand2.candidato.nivel.grau"%s", &cand2.candidato.nivel.grau));; printf (printf ("%s eh um %s candidato\n”,"%s eh um %s candidato\n”, cand2.nome , cand2.candidato.nivel.graucand2.nome , cand2.candidato.nivel.grau));; }} /* Fim do else */ /* Fim do else */ printf (printf ("%s %ld %f\n” , cand2.nome , cand2.candidato.id,"%s %ld %f\n” , cand2.nome , cand2.candidato.id, cand2.candidato.inscrcand2.candidato.inscr));; printfprintf (("%s%ld %f\n” , apont->nome , apont->candidato.id ,"%s%ld %f\n” , apont->nome , apont->candidato.id , apont->candidato.inscrapont->candidato.inscr));;}} /* Fim do programa */ /* Fim do programa */

Page 19: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

19{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

EnumsEnums IEnumsEnums I

Enumeração I

Tipo de dado definido pelo usuário a partir da palavra-chave enumenum

Sintaxe

enum [etiqueta]enum [etiqueta]{{

lista_de_enumeradoreslista_de_enumeradores} [declarador];} [declarador];

Enumeração I

Tipo de dado definido pelo usuário a partir da palavra-chave enumenum

Sintaxe

enum [etiqueta]enum [etiqueta]{{

lista_de_enumeradoreslista_de_enumeradores} [declarador];} [declarador];

Page 20: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

20{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

EnumsEnums IIEnumsEnums II Enumeração II

EtiquetaEtiqueta Uso indireto

Lista_de_enumeradores Lista_de_enumeradores Constantes simbólicas Valores inteiros de 00 a nn

Exemplo 05

enum dias {Segunda, Terca, enum dias {Segunda, Terca, Quarta};Quarta};

Criação de 33 constantes SegundaSegunda é associada ao valor 00 TercaTerca é associada a 11 QuartaQuarta é associada a 22

Enumeração II

EtiquetaEtiqueta Uso indireto

Lista_de_enumeradores Lista_de_enumeradores Constantes simbólicas Valores inteiros de 00 a nn

Exemplo 05

enum dias {Segunda, Terca, enum dias {Segunda, Terca, Quarta};Quarta};

Criação de 33 constantes SegundaSegunda é associada ao valor 00 TercaTerca é associada a 11 QuartaQuarta é associada a 22

Page 21: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

21{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

EnumsEnums IIIEnumsEnums III Enumeração III

Lista_de_enumeradoresLista_de_enumeradores

Primeiro enumerador Atribuição do valor 00

Cada enumerador sucessivo Atribuição de um valor maiormaior do que o de seu predecessor

Possibilidade de especificação explícita de um valor para um enumerador particular

Enumeração III

Lista_de_enumeradoresLista_de_enumeradores

Primeiro enumerador Atribuição do valor 00

Cada enumerador sucessivo Atribuição de um valor maiormaior do que o de seu predecessor

Possibilidade de especificação explícita de um valor para um enumerador particular

Page 22: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

22{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

EnumsEnums IVEnumsEnums IV Enumeração IV

Lista_de_enumeradoresLista_de_enumeradores

Enumeradores nãonão precisam estar associados a valores únicosúnicos

O nome de cadacada enumerador deve ser únicoúnico no escopo de definição da enumenum

A conversão de um inteiro para um enumerador requer um cast explícito

Os resultados nãonão são definidosdefinidos

Enumeração IV

Lista_de_enumeradoresLista_de_enumeradores

Enumeradores nãonão precisam estar associados a valores únicosúnicos

O nome de cadacada enumerador deve ser únicoúnico no escopo de definição da enumenum

A conversão de um inteiro para um enumerador requer um cast explícito

Os resultados nãonão são definidosdefinidos

Page 23: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

23{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Exemplo 06 - Uso de tipos de dados enumerados para acesso aos itens de um array

Exemplo 06 - Uso de tipos de dados enumerados para acesso aos itens de um array

#include <stdio.h>#include <stdio.h>int main( )int main( ){{ int int Novembro[5][7]={{0,0,1,2,3,4,5},{6,7,8,9,10,11,12},Novembro[5][7]={{0,0,1,2,3,4,5},{6,7,8,9,10,11,12}, {13,14,15,16,17,18,19},{20,21,22,23,24,25,26},{13,14,15,16,17,18,19},{20,21,22,23,24,25,26}, {27,28,29,30,0,0,0}};{27,28,29,30,0,0,0}}; enum enum dias dias {{Domingo, Segunda, Terca, Quarta, Quinta, Sexta,Domingo, Segunda, Terca, Quarta, Quinta, Sexta, SabadoSabado}} enum enum semana semana {{semana01, semana02, semana03, semana04,semana01, semana02, semana03, semana04, semana05semana05}};;

printf (printf (“Quinta da primeira semana de Novembro eh dia %d\n",“Quinta da primeira semana de Novembro eh dia %d\n",Novembro [semana01][Quinta]Novembro [semana01][Quinta]););

}}

EnumsEnums VEnumsEnums V

Page 24: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

24{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Structs Structs em C/ C++em C/ C++ IStructs Structs em C/ C++em C/ C++ I

CC C++C++Uso explícitoexplícito da palavra-chave structstruct para a declaração/ definição da estrutura

Similaridade com uma classe (classclass) com membros públicos (publicpublic) por definição

Uso desnecessáriodesnecessário da palavra-chave structstruct após a declaração/ definição do tipo

Page 25: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

25{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Exemplo 07 Exemplo 07

struct struct INDIVIDUO // Declaracao do tipo struct INDIVIDUOINDIVIDUO // Declaracao do tipo struct INDIVIDUO{{ int int idade;idade; // Declaracao dos tipos dos membros// Declaracao dos tipos dos membros char char nome[40];nome[40]; float float altura;altura; float float peso;peso;} } membro_da_familia; // Definicao da variavel do tipo INDIVIDUOmembro_da_familia; // Definicao da variavel do tipo INDIVIDUO

struct struct INDIVIDUO pai; // Declaracao da estrutura em CINDIVIDUO pai; // Declaracao da estrutura em CINDIVIDUO mae, tio, prima; // Declaracao da estrutura em C++INDIVIDUO mae, tio, prima; // Declaracao da estrutura em C++

mae.altura = 1.69; // Atribuicao de valores aos membrosmae.altura = 1.69; // Atribuicao de valores aos membrospai.idade = 76;pai.idade = 76;prima.nome = {“Julia Lemos de Andrade”};prima.nome = {“Julia Lemos de Andrade”};tio.peso = 87;tio.peso = 87;

Structs Structs em C/ C++em C/ C++ IIStructs Structs em C/ C++em C/ C++ II

Page 26: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

26{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Exemplo 08 (Inicialização) Exemplo 08 (Inicialização)

structstruct PONTO // Declaracao da estrutura PONTO PONTO // Declaracao da estrutura PONTO{{ intint x; // Definicao de membros da estrutura PONTO x; // Definicao de membros da estrutura PONTO intint y; y;}} alvo = {20, 40}; // Atribuicao dos valores x = 20, alvo = {20, 40}; // Atribuicao dos valores x = 20, // y = 40 ah variavel alvo// y = 40 ah variavel alvo

structstruct PONTO ponto1; // Declaracao de variavel do tipo PONTO PONTO ponto1; // Declaracao de variavel do tipo PONTO

structstruct FOCO // Declaracao do campo de bits FOCO FOCO // Declaracao do campo de bits FOCO{{ unsignedunsigned caractere: 8; // 00000000 ???????? caractere: 8; // 00000000 ???????? unsignedunsigned foreground: 3; // 00000??? 00000000 foreground: 3; // 00000??? 00000000 unsignedunsigned intensidade: 1; // 0000?000 00000000 intensidade: 1; // 0000?000 00000000 unsignedunsigned background: 3; // 0???0000 00000000 background: 3; // 0???0000 00000000 unsignedunsigned pisca: 1; // ?0000000 00000000 pisca: 1; // ?0000000 00000000}} tela[25][80]; // Array de campos de bits tela[25][80]; // Array de campos de bits

Structs Structs em C/ C++em C/ C++ IIIStructs Structs em C/ C++em C/ C++ III

Page 27: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

27{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Unions Unions em C/ C++em C/ C++ IUnions Unions em C/ C++em C/ C++ I

CC C++C++

Uso explícitoexplícito da palavra-chave unionunion para a declaração/ definição da união

Uso desnecessáriodesnecessário da palavra-chave unionunion após a declaração/ definição do tipo

Page 28: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

28{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Exemplo 09 Exemplo 09

unionunion JUNCAO JUNCAO{{ intint a, b, c; a, b, c; floatfloat d, e, f; d, e, f; doubledouble g, h, i; g, h, i;}};;

unionunion JUNCAO v1; // Declaracao da estrutura em C JUNCAO v1; // Declaracao da estrutura em CJUNCAO v2; // Declaracao da estrutura em C++JUNCAO v2; // Declaracao da estrutura em C++

v1.b = 5; // Uso da variavel como intv1.b = 5; // Uso da variavel como intv2.d = 5.13; // Uso da variavel como floatv2.d = 5.13; // Uso da variavel como floatv1.h = 7.256; // Uso da variavel como doublev1.h = 7.256; // Uso da variavel como double

Unions Unions em C/ C++em C/ C++ IIUnions Unions em C/ C++em C/ C++ II

Page 29: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

29{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Enums Enums em C/ C++em C/ C++ IEnums Enums em C/ C++em C/ C++ I

CC C++C++

Uso explícitoexplícito da palavra-chave enumenum para a declaração da união

Uso apenasapenas da etiqueta (tag) da enumeração

Page 30: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

30{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

DSC/CCT/UFCG

DSC/CCT/UFCG

Exemplo 10 Exemplo 10

enumenum Dias // Declaracao do tipo enum Dias Dias // Declaracao do tipo enum Dias{{ Sabado, // Sabado = 0 (por definicao)Sabado, // Sabado = 0 (por definicao) Domingo = 0, // Domingo = 0 (por atribuicao do usuario)Domingo = 0, // Domingo = 0 (por atribuicao do usuario) Segunda, // Segunda = 1Segunda, // Segunda = 1 Terca, // Terca = 2Terca, // Terca = 2 Quarta, // Quarta = 3Quarta, // Quarta = 3 Quinta, // Quinta = 4Quinta, // Quinta = 4 Sexta // Sexta = 5Sexta // Sexta = 5}} Hoje; // Criacao da variavel Hoje do tipo Dias Hoje; // Criacao da variavel Hoje do tipo Dias

intint Sexta; // Definicao incorreta (redefinicao de Sexta) Sexta; // Definicao incorreta (redefinicao de Sexta)

enumenum Dias Ontem; // Correta em C e C++ Dias Ontem; // Correta em C e C++Dias Amanha; // Correta apenas em C++Dias Amanha; // Correta apenas em C++

Ontem = Quinta;Ontem = Quinta;

intint d = Quinta; // Correta (atribuicao de 2 a d) d = Quinta; // Correta (atribuicao de 2 a d)Ontem = 0; // Incorreta (sem conversao de tipo)Ontem = 0; // Incorreta (sem conversao de tipo)Ontem = (Dias)0; // Correta, mas com resultados indefinidosOntem = (Dias)0; // Correta, mas com resultados indefinidos

Enums Enums em C/ C++em C/ C++ IIEnums Enums em C/ C++em C/ C++ II

Page 31: Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br rangeldequeiroz@gmail

DSC/CCT/UFCGDSC/CCT/UFCG

{jose

ana,

ran

gel}@

dsc.

ufcg

.edu

.br

[email protected], [email protected]

[email protected], [email protected]

José Eustáquio Rangel de Queiroz

José Eustáquio Rangel de Queiroz

DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

UNIVERSIDADE FEDERAL DE CAMPINA GRANDE

UNIVERSIDADE FEDERAL DE CAMPINA GRANDECENTRO DE CIÊNCIAS E TECNOLOGIACENTRO DE CIÊNCIAS E TECNOLOGIA