Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Profa. Dra. Ieda Hidalgo E-mail: iedahidalgo@ft.unicamp.br Estruturas e Estruturas Encadeadas 2 Há cinco tipos de dados simples que estão predefinidos no compilador: Com eles, podemos definir tipos complexos que possibilitam agrupar um conjunto de variáveis sob um único nome. � Chart � Int � Float � Double � Void Dados Simples x Dados Complexos 3 Tipos de Dados Complexos A linguagem C++ oferece 4 meios de criar novos tipos de dados: 1. Matrizes 2. Estruturas 3. Uniões 4. Classes (enum e typedef) 4 Estruturas x Matrizes Matrizes são tipos de variáveis que agrupam dados similares. Seus itens de dados são chamados elementos. Estruturas são tipos de variáveis que agrupam dados geralmente desiguais. Seus itens de dados são chamados membros. 5 Estruturas x Classes (1/2) Em geral, os programadores C++, criam: � Estruturas para agrupar itens de dados. Elas têm membros públicos por default. � Classes para agrupar itens de dados e funções. Elas têm membros privados por default. 6 Estruturas x Classes (2/2) No entanto, em C++ você pode usar estruturas exatamente como usa classes 7 Definindo Estrutura Usando a palavra struct podemos definir um novo tipo de dado que agrupa um conjunto de variáveis sob um mesmo nome. struct aluno // (palavra chave + nome do tipo) { int matricula; // 1o membro float media; // 2o membro }; O tamanho de uma estrutura é igual ou maior que a soma dos tamanhos dos seus membros. 8 Declarando uma Variável do Tipo Definido Após ter sido definido o tipo aluno podemos declarar uma variável desse tipo. A declaração de variáveis de tipos definidos pelo usuário é similar a declaração de variáveis de tipos simples. aluno ana; // nome do tipo + nome da variável A declaração da variável ana do tipo aluno reserva espaço de memória suficiente para armazenar todos os membros da estrutura. 9 Acessando Membros da Estrutura Podemos acessar um membro da variável de tipo definido pelo usuário por meio do operador "." A linguagem C++ trata os membros de uma estrutura como quaisquer outras variáveis simples. ana.matricula = 10; // atribui o valor 10 à variável ana.matricula é uma variável do tipo int e pode seu usada em todo lugar onde possamos utilizar uma variável int. 10 Combinando Declarações Podemos combinar a definição da estrutura e a declaração da variável do tipo definido em uma única instrução. struct // não é necessário o nome do tipo { int matricula; float media; } ana; // declaração da variável é aqui Isso torna a escrita mais compacta, entretanto menos clara e flexível. 11 Declarando Diversas Variáveis Diversas variáveis podem ser declaradas de uma única vez separadas por vírgulas: struct // não é necessário o nome do tipo { int matricula; float media; } ana, pedro, jose; // declaração de diversas variáveis 12 Inicializando Estruturas A inicialização de estruturas é semelhante à inicialização de uma matriz. struct data { int dia; char mes[10]; int ano; }; data natal = {25, "Dezembro", 2009}; // declara e inicializa a variável natal do tipo data Os valores a serem atribuídos aos seus membros devem ser colocados na ordem em que foram definidos, separados por vírgulas e entre chaves. 13 Atribuições entre Estruturas Uma variável estrutura pode ser atribuída a outra variável do mesmo tipo por meio de uma atribuição simples. data festa; // declara a variável festa do tipo data andre = natal; // atribui os valores de natal para andre Dessa forma, todos os valores dos membros da estrutura estão realmente sendo atribuídos de uma única vez aos membros correspondentes da outra estrutura. No caso de matrizes a atribuição deve ser feita elemento a elemento. 14 Estruturas Encadeadas Podemos definir estruturas cujos membros são outras estruturas. struct data { int dia; char mes[10]; int ano; }; struct venda { int pecas; float preco; data dia_venda; }; Um membro da estrutura venda chamado dia- venda é do tipo da estrutura data. 15 Acessando Membros de Estruturas Encadeadas // declara uma variável chamada “A” do tipo “venda” venda A; // acessa o membro “mês” do membro “dia_venda” da variável “A” A.dia_venda.mes; 16 Inicializando Estruturas Encadeadas // peça, preço, dia, mês, ano venda A = {20, 110.0, {7, "Novembro", 2009}}; 17 Passando Membros de uma Estrutura para Funções Por Valor: void listavenda(venda X) { ... } listavenda(A.preco); Por Referência: void listavenda(venda &X) { ... } listavenda(A.preco); 18 Passando Estruturas para Funções Por Valor: void listavenda(venda X) { ... } listavenda(A); Por Referência: void listavenda(venda &X) { ... } listavenda(A); 19 Funções que Retornam uma Estrutura C++ permite que as funções retornem uma estrutura completa. Nesse caso, a função deve ser do tipo da estrutura, pois ela retorna uma variável desse tipo. venda novavenda() { venda A; ... return (A); } 20 Matrizes de Estruturas Podemos criar uma matriz de estruturas onde cada elemento da matriz representa, por exemplo, uma venda. venda vendas[50]; // para acessar um membro vendas[n].preco; 21 Uniões A palavra-chave union, assim como struct, agrupa um número de diferentes variáveis sob um único nome. A sintaxe de ambas é idêntica. Uma struct aloca um espaço diferente de memória para cada membro. Uma union utiliza um mesmo espaço de memória para os diferentes membros. Quando você declara uma variável de um tipo union, automaticamente é alocado espaço de memória suficiente para conter o seu maior membro. Uniões são usadas para poupar memória. 22 Tipo de Dados Enumerados São usados quando conhecemos o conjunto de valores que uma variável pode assumir. A variável deste tipo é sempre int. Portanto, qualquer operação possível com inteiros é permitida com eles. A palavra-chave enum enumera a lista de nomes significativos, dando-lhes números em sequência (como por exemplo: 0, 1, 2, etc). A vantagem é que esse tipo torna mais clara e simples a escrita do programa, pois utilizamos nomes no lugar dos números. 23 Exemplos A palavra enum enumera nomes significativos a partir do: zero (default) enum chave {OFF, ON}; primeiro valor fornecido enum mes {Jan=1, Fev, Mar, Abr, Mai, Jun}; conforme especificado enum direcao {norte=50, sul=60, leste=70, oeste=80}; 24 Typedef Usando a palavra-chave typedef é possível definir novos nomes aos tipos de dados existentes. Isso ajuda a tornar programas dependentes da máquina um pouco mais portáveis, pois para cada tipo de dado, apenas os comandos typedef teriam de ser mudados quando você compilar o programa em um novo ambiente. Sintaxe: typedef tipo novonome; Exemplo: typedef float balance; // esse comando diz ao compilador para reconhecer balance como outro nome para float.
Compartilhar