Buscar

document onl_apostila-de-c-559bf457d3ee1

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 61 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 1/61
 
AEDAED –– Algoritmos e EstruturasAlgoritmos e Estruturas
de Dadosde Dados
Estruturas de dados em C++
(atualizado em 25/9/2007)
Renato Fabiano Matheus, PUC Minas, 2007/2Sistemas de Informação
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 2/61
 
25/9/2007 / 2AED / PUC Minas / 2007-2
AgendaAgenda
 Visão geral

Programação em C++ - C++
 Programação orientada a objetos - POO
 Estruturas de dados – AED
 Pilhas
 Filas
 Listas
 Listas circulares
 Tabelas
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 3/61
 
25/9/2007 / 3AED / PUC Minas / 2007-2
AgendaAgenda
 Visão geral

Programação em C++ - C++
 Programação orientada a objetos - POO
 Estruturas de dados – AED
 Pilhas
 Filas
 Listas
 Listas circulares
 Tabelas
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 4/61
25/9/2007 / 4AED / PUC Minas / 2007-2
Visão geral do móduloVisão geral do módulo
 C++

POO
 AED
POO
AEDC++
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 5/61
25/9/2007 / 5AED / PUC Minas / 2007-2
AgendaAgenda
 Visão geral

Programação em C++
 Programação orientada a objetos - POO
 Estruturas de dados – AED
 Pilhas
 Filas
 Listas
 Listas circulares
 Tabelas
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 6/61
25/9/2007 / 6AED / PUC Minas / 2007-2
C++ / ConceitosC++ / Conceitos
 Algoritmo = descrição de um padrão de comportamento
representado por um conjunto finito de ações.
 Dado = representação abstrata da informação que pode ser
tratada computacionalmente.
 Programa = formulações concretas de algoritmos abstratos,
baseados em representação e estruturas específicas de
dados. Representam classes especiais de algoritmos
capazes de serem seguidos por computadores.
PROGRAMA = ALGORITMO + ESTRUTURA DE DADOS
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 7/61
25/9/2007 / 7AED / PUC Minas / 2007-2
C++ / ConceitosC++ / Conceitos
 Tipo de dado = especificação da classe de valores que podem ser
associados a um dado, bem como das operações que podem ser
usadas para criar, acessar e modificar estes valores.
 Tipos simples ou primitivos
 Ex: inteiro, real, lógico, caractere
 int contador = 0;
 Tipos compostos ou estruturados = coleção de valores simples
 Ex.: registros, arranjos, arquivos
 struct _Cubo {
int tamanhoAresta_cm;
int calculaVolume();
}
 Tipos definidos pelo usuário = tipos compostos definidos pelo usuário
 Ex.: estruturas, classes
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 8/61
25/9/2007 / 8AED / PUC Minas / 2007-2
C++ / Ambiente de desenvolvimentoC++ / Ambiente de desenvolvimento
 Ambiente de desenvolvimento Bloodshed Dev-C++
 http://www.bloodshed.net/devcpp.html
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 9/61
25/9/2007 / 9AED / PUC Minas / 2007-2
C++ / A linguagemC++ / A linguagem
 A linguagem C é um subconjunto da linguagem
C++
 C++ é uma linguagem OO (Orientada a Objeto)
 Foi proposta por Bjarne Stroustrup (1997, p. 10)
a partir da linguagem C (KERNIGHAN;
RITCHIE, 1978)
 http://www.research.att.com/~bs/homepage.html
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 10/61
25/9/2007 / 10AED / PUC Minas / 2007-2
C++ / Programa mínimoC++ / Programa mínimo
Inclusão de arquivos de cabeçalhos
de bibliotecas padrão (STL)
Inclui namespace
std no
namespace global.
Evitando
necessidade de
prefixar:
(e.g. std::cout)
(STROUSTRUP,
1997, p. 117) Variável “nome” do tipo “string”,definido na STL
Entrada e saída
padrão
Assinatura da função
“main”
Início e fim de bloco
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 11/61
25/9/2007 / 11AED / PUC Minas / 2007-2
C++ / C++ / namespacenamespace stdstd
#include <iostream>
int main (int argc, char* argv[])
{
std::cout << "H e l l o , n e w w o r l d !\ n ";
}
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 12/61
25/9/2007 / 12AED / PUC Minas / 2007-2
C++ / SintaxeC++ / Sintaxe
 Sintaxe da linguagem C/C++
http://www.cprogramming.com/reference/ 
 Referência de library
http://www.cplusplus.com/reference
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 13/61
25/9/2007 / 13AED / PUC Minas / 2007-2
C++ / SintaxeC++ / Sintaxe
 Sensível a maiúsculas e minúsculas

“A” diferente de “a”
 INT não é um tipo de dado válido
 Operadores

Lógicos: AND && OR || NOT EQUAL !=
EQUAL ==
 Atribuição: = += -=

Comentários
 de linha: //
 de bloco: /* … */
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 14/61
25/9/2007 / 14AED / PUC Minas / 2007-2
C++ / SintaxeC++ / Sintaxe
 Pós e pré-incremento

++i--
 Vetores e matrizes (índices começam pelo
elemento 0)

int matriz[10][9]
 Primeiro elemento matriz[0][0]
 Último elemento matriz[9][8]
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 15/61
25/9/2007 / 15AED / PUC Minas / 2007-2
C++ / SintaxeC++ / Sintaxe
 Loops
// como não há blocos, só próximo comando está no loopfor (cont = 0; cont < 100, sequencia[cont] != 0; cont++)
soma += sequencia[cont];
cont = 0;
do
{
sprintf( mensagem, "Qual o numero de ordem %d? ", cont
+ 1 );
sequencia[cont] = leNumero(mensagem);
// Na primeira execução da primeira comparação, cont
// tem valor 0 e na segunda conta tem valor 1, devido
// ao operador de pós-incremento ++
} while( cont++ < 100 && sequencia[cont] != 0 );
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 16/61
25/9/2007 / 16AED / PUC Minas / 2007-2
C++ / Escopo de variáveisC++ / Escopo de variáveis
 Declaração
 pode acontecer em qualquer lugar onde um
comando qualquer pode (STROUSTRUP,
1997, p. 14)
 Escopo
 Globais
 Locais
 Modificadores de tipo
 const
 static
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 17/61
25/9/2007 / 17AED / PUC Minas / 2007-2
C++ / Tipos de variáveisC++ / Tipos de variáveis
 Tipos de dados simples: string, int

Tipos de dados estruturados, definidospelo usuário
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 18/61
25/9/2007 / 18AED / PUC Minas / 2007-2
C++ / Passagem de parâmetrosC++ / Passagem de parâmetros
 Por valor
 Dados simples são passados normalmente por valor
 Cria na pilha de parâmetros da função uma cópia da
variável original, que permanecerá inalterada caso
sejam feitas modificações localmente.
 Por ponteiros: modificador ‘*’
 Passa o endereço para o método.
 Por referência: modificador ‘&’
 Cria na pilha de parâmetros da função uma variável
que na verdade aponta para mesmo endereço doparâmetro original.
 Vetores são sempre passadas por referência
 Exemplos: projeto aed.dev
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 19/61
25/9/2007 / 19AED / PUC Minas / 2007-2
C++ / Exemplos de parâmetrosC++ / Exemplos de parâmetros
 // Passagem por valor
 void imprimePontoPorValor( Ponto p1 )
 {

cout << "Por valor"; cout << "X = " << dec << p1.x << " Y = " << dec <<
p1.y << endl;

 p1.x += p1.x;
 p1.y += p1.y;

}
 // Referência altera
 void imprimePontoPorReferencia( Ponto& p1 )
 {
 cout << "Por referência"; cout << "X = " << dec << p1.x << " Y = " << dec <<
p1.y << endl;
 p1.x += p1.x;
 p1.y += p1.y;
 }
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 20/61
25/9/2007 / 20AED / PUC Minas / 2007-2
C++ / Funções e métodos versusC++ / Funções e métodos versus
procedimentosprocedimentos
 Funções retornam valor
 Procedimentos não retornam (void)

Assinatura de um método/procedimento
 Nome do método
 Tipos e nomes dos parâmetros
 Tipo de dado retornado
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 21/61
25/9/2007 / 21AED / PUC Minas / 2007-2
C++ / Alocação de memóriaC++ / Alocação de memória
 Alocação estática
 Variáveis
 Estruturas
 Vetores (arrays) e matrizes
 Alocação dinâmica
 Ponteiros
 Endereço é um valor, logo pode ser guardado na memória
 Apontador = variável cujo valor é um endereço da memória
 Vantagens: otimiza o gerenciamento da memória, podendo tornar uma
implementação mais eficiente
 Desvantagens: difícil de aprender a gerenciar sem erros a memória
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 22/61
25/9/2007 / 22AED / PUC Minas / 2007-2
C++ / Exemplo de alocação
C++ / Exemplo de alocação
#include <cstdio>
int x = 10;
int *ptr = &x;
void mostrar(){
cout << “\nVariavel x:” << x;
cout << “\nEndereco de x: ” << &x;
cout << “\nVariavel ptr: ” << ptr;
cout << “\nConteudo de ptr: ” <<
*ptr;
cout << “\nEndereco de ptr: ” <<
&ptr;
}
void main(){
mostrar();
*ptr = 830;
mostrar();
}
Variavel x:10
Endereco de x: F81A
Variavel ptr: F81A
Conteudo de ptr: 10
Endereco de ptr: F84A
Variavel x:830
Endereco de x: F81A
Variavel ptr: F81A
Conteudo de ptr: 830
Endereco de ptr: F84A
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 23/61
25/9/2007 / 23AED / PUC Minas / 2007-2
C++ / Exemplo de alocação
C++ / Exemplo de alocação
#include<stdio.h>
void main(){
char u, v = ‘S’;
char *pu, *pv = &v;
*pv = v + 1;
u = *pv + 1;
pu = &u;
}
Suponha que cada caractere ocupe 1 byte.Se o valor atribuído a u é armazenado no
endereço F8C e o valor atribuído a v é
armazenado no endereço F8D, então:

Qual o valor representado por &v?
 Qual valor é atribuído a pv?
 Qual valor é representado por *pv?
 Qual valor é atribuído a u?
 Qual valor é representado por &u?
 Qual valor é atribuído a pu?
 Qual valor é representado por *pu?
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 24/61
25/9/2007 / 24AED / PUC Minas / 2007-2
C++ / versus C
C++ / versus C
 Alocação dinâmica de memória
 C: malloc / free / realloc
 Realocação de espaços
 C++: new / delete
 Coleta de lixo automática em C++ (garbage collection)
 Uso de classe vector() da STL (Standard Template Library) para
realocação dinâmica
 Otimização
 Evitar uso de macros, usar const (STROUSTRUP, 1997, p. 14)
 Programação genérica em C++ (STROUSTRUP, 1997, p. 40)
 Métodos virtuais
 STL

String versus char[]
 Sobreposição de métodos
 POO
 Interfaces de classes e encapsulamento
 Construtores e destrutores
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 25/61
25/9/2007 / 25AED / PUC Minas / 2007-2
C++ / Gerenciamento de memória
C++ / Gerenciamento de memória
Sistema
Operacional
Código do
programa
Dados
Variáveis globais e estáticas
Heap Memória gerenciada dinamicamente
↓↓↓↓
↑↑↑↑
Pilha
Variáveis automáticas (funções e procedimentos)
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 26/61
25/9/2007 / 26AED / PUC Minas / 2007-2
POO / POO / structuresstructures com métodos ecom métodos e
acesso a membros da estruturaacesso a membros da estrutura
struct Ponto
{
int x;
int y;
// Funções
void display();
};
Ponto p;
p.x; p.y; p.display;
Ponto *p = new Ponto;
P->x; p->y; p->display.
Acesso a membros de
estruturas estáticas
Acesso a membros de
estruturas dinâmicas
(ponteiros)
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 27/61
25/9/2007 / 27AED / PUC Minas / 2007-2
POO / STL / 
POO / STL / 
strings
strings
 Classe string
 #include <string>
 using std::string;
 Métodos
 empty(), size(), length(), substr(), replace(), erase(), finde
 c_str()

conversão de string para array de caracteres
 Exemplos (projeto aed.dev)
string s = "abc def abc";
string s2 = "abcde uvwxyz";
char c;
char ch[] = "aba daba do";
char *cp = ch;unsigned int i;
 Fonte:
http://www.bgsu.edu/departments/compsci/docs/string.html
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 28/61
25/9/2007 / 28AED / PUC Minas / 2007-2
POO / STL / POO / STL / stringsstrings: exemplo: exemplo
cin >> s; Lê até o separador espaço
getline(cin, s); Lê até o caractere ENTER
cout << s; Envia para saída padrão
s = s2; s = "abc";
s = ch; s = cp;
Um array, literal ou variável podem ser atribuídos diretamente a um
string. ch ou cp têm mesmo efeito.
s[1] = 'c';c = s[1]; Muda s para "acc def abc".Operador subscript retorna um char e não string.
i = s.length();
i = s.size();
Ambos retornam tamanho de s
if(s.empty()) i++;
if(s == "") i++;
Ambos adicionam 1 a i caso s esteja vazio.
If (s < s2) i++; Campara código ASCII dos strings.
s = s + "x";
s += "x";
Exemplos adicionam x ao fim de s
S = s.substr(1,4); Retorna substring ‘bc d’.
s.replace(4,3,"x");
Substitui 3 caracteres de ‘s’, a partir da posição 4, por ‘x’. Retorno "abc
x abc".
s.erase(4,5);
s.erase(4);
Apaga 5 caracteres da string a partir da posição 4.
s = ch; Converte array de caracteres para string
cp = s.c_str();
Ponteiro cp passa a apontar um array de caracteres com o conteúdo
equivalente a s.
i = s.find("ab",4);
if(s.rfind("ab",4)
!= string::npos)
Retorna a posição do substring “ab”, começando a busca na posição 4.
Se não encontrar, retorna unsigned int string::npos.
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 29/61
25/9/2007 / 29AED / PUC Minas / 2007-2
POO / STL / POO / STL / mathmath
 Classe math
#include <cmath>
 Funções
 trigonométricas (cos, sin, tan, aços, asin, atan, atan2);

hiperbólicas (cosh, sinh, tanh);
 exponencial e logarítmicas (exp, frexp, ldexp, log,
log10, modf);
 potencia (pow, sqrt); arredondamento e valor absoluto
(ceil, fabs, floor, fmod)
 Fonte: http://www.cplusplus.com/reference/clibrary/cmath/ 
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 30/61
25/9/2007 / 30AED / PUC Minas / 2007-2
POO / STL / POO / STL / mathmath
 Distância entre dois pontos
 Distância entre dois pontos em C++
 sqrt(pow(x1 – x2, 2) + pow(y1 – y2, 2));

Exemplos: projeto aed-poo.dev
2
21
2
21 )()( y y x x −+−
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 31/61
25/9/2007 / 31AED / PUC Minas / 2007-2
C++ / Qualidade de códigoC++ / Qualidade de código
 Legibilidade (clareza no código)
 Comentários
 Nomes de métodos e variáveis
 Identação
 Controle de fluxo
 Não usar goto (desvio incondicional)

return só no final das funções Usar CONSTANTES e não números mágicos
 Exemplo: programa “aed-qualidadecodigo”
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 32/61
25/9/2007 / 32AED / PUC Minas / 2007-2
C++ / Qualidade de códigoC++ / Qualidade de código
 Acoplamento e coesão
 Divisão em módulos e funções, bem como classes,
com uma única função
 Permite concentrar a atenção em módulos específicos em diferentes
momentos
 Facilita a manutenção do programa
 Facilita a reutilização do programa
 Fatores externos
 Eficiência
 Robustez

EscalabilidadeInterface
 Documentação
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 33/61
25/9/2007 / 33AED / PUC Minas / 2007-2
AgendaAgenda
 Visão geral

Programação em C++ - C++ Programação orientada a objetos - POO
 Estruturas de dados – AED
 Pilhas
 Filas
 Listas
 Listas circulares
 Tabelas
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 34/61
25/9/2007 / 34AED / PUC Minas / 2007-2
POO / PrincípiosPOO / Princípios
 Encapsulamento
 Herança
 Permite definição de uma classe a partir de
outro, facilitando a reutilização de código
 Polimorfismo
 Métodos com mesmo nome mas cuja
assinatura é diferente, sendo qual será usado
de acordo com os tipos de parâmetros e valor
de retorno
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 35/61
25/9/2007 / 35AED / PUC Minas / 2007-2
POO / ElementosPOO / Elementos
 Classes
 modelos para a criação de objetos
 Animais são seres vivos:
 O que podem fazer:
 Nascem, vivem, crescem e morrem
 Podem se movimentar
 Têm pai e mãe
 Quais características têm:
 Idade
 Peso
 Atributos ou propriedades (características)
 características dos objetos
 Métodos (o que podem fazer)
 comportamento (ações) dos objetos da classe
 Objetos
 instâncias de uma classe
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 36/61
25/9/2007 / 36AED / PUC Minas / 2007-2
POO / Implementação em C++POO / Implementação em C++
 Classes
 Interfaces
 Arquivo de cabeçalho contendo nome, propriedades e métodos da
classe, bem como suas assinaturas
 Ex.:
 #include “animal.h”
 Implementação
 Arquivo contendo a implementação dos métodos cuja assinatura é
definida na interface da classe
 Ex.:
 animal.cpp
 Construtores

Inicialização de objetos
 Destrutores
 Liberação de espaço e controles
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 37/61
25/9/2007 / 37AED / PUC Minas / 2007-2
POO / Implementação em C++POO / Implementação em C++
 Visibilidade de métodos e propriedades
 public:
 private:
 protect:

Métodos e propriedades de classe
 static
 Propriedades e métodos da classe
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 38/61
25/9/2007 / 38AED / PUC Minas / 2007-2
POO / Implementação em C++POO / Implementação em C++
 Herança
 Classe filho herda estrutura e comportamento da classe pai

Tipos
 •Herança simples: uma classe pai
 •Herança múltipla: mais de uma classe pai
 Ex.:
 class cachorro:animal { }
 A classe derivada pode acessar os membros public e
protected do pai
 Declaração da nova classe / herança
class <nova classe> : [private|public] <pai>
 private: default
 public: tudo o que é público aos utilizadores da classe pai, será
público para os utilizadores da classe filho, a não ser que seja
sobrecarregado na função filho.
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 39/61
25/9/2007 / 39AED / PUC Minas / 2007-2
POO / Implementação em C++POO / Implementação em C++
 Implementação de métodos de classe
 Métodos virtual
 virtual void movimentaAnimal();
 Apontador “this->” para propriedades do objeto
 this->tamanho++; // usado dentro dos métodos da
classe
 Exemplo: aed-Cubo.dev
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 40/61
25/9/2007 / 40AED / PUC Minas / 2007-2
POO / Estruturas versus classesPOO / Estruturas versus classes
Abstração Variáveis / 
propriedades
Funções / 
métodos
Herança Escopo
 protect 
Estrutura Sim Sim Não Não
Classe Sim Sim Sim Sim
 Interface da classe

Nome da classe
 Propriedades da classe
 Assinatura dos métodos e procedimentos da
classe
 
POO / Interface da classePOO / Interface da classe
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 41/61
25/9/2007 / 41AED / PUC Minas / 2007-2
POO / Interface da classePOO / Interface da classe
(#(#includeinclude “cubo. h”)“cubo. h”)class Cubo
{
private:
int altura, largura, profundidade;
public:
Cubo( int, int, int );
~Cubo();
int volume( void );
};
 
POO / ImplementaçãoPOO / Implementação
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 42/61
25/9/2007 / 42AED / PUC Minas / 2007-2
POO / ImplementaçãoPOO / Implementação
(Cubo.cpp)(Cubo.cpp)#include “cubo.h”
// Função construtora
Cubo::Cubo( int ht, int wd, int dp )
{
altura = ht;
largura = wd;
profundidade = dp;
}
// Função Destruidora
Cubo::~Cubo()
{
// não faz nada
}
int Cubo::volume()
{
return altura * largura * profundidade;
}
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 43/61
25/9/2007 / 43AED / PUC Minas / 2007-2
AgendaAgenda
 Visão geral
 Programação em C++ - C++
 Programação orientada a objetos - POO
 Estruturas de dados – AED
 Pilhas
 Filas
 Listas
 Listas circulares
 Tabelas
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 44/61
25/9/2007 / 44AED / PUC Minas / 2007-2
AED / ListasAED / Listas
 Lista linear
 Definição

“Lista é uma estrutura em que as operações inserir, retirar elocalizar são definidas. [...] Uma lista linear é uma seqüência
de zero ou mais itens x1, x2, ... Xn, na qual xi é de um
determinado tipo e n representa o tamanho da lista linear.”
(ZIVIANI, 2004, p. 63)
 Operações
 Para se implementar uma lista linear é necessário um
conjunto básico de operações
 Lista.FazListaVazia()

Lista.EstaVazia()
 Lista.Insere( x )
 Lista.Retira( p, x )
 Lista.Imprime()
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 45/61
25/9/2007 / 45AED / PUC Minas / 2007-2
AED / Listas e FilasAED / Listas e Filas
 Fila
 Definição
 “Uma fila é uma lista linear em que todas as
inserções são realizadas em um extremo da lista, e
todas as retiradas e, geralmente, os acessos são
realizados no outro extremo da lista” (ZIVIANI,2004, p. 81)
 Comportamento

FIFO – First In First Out = Fila
 “Primeiro a entrar, primeiro a sair” (CORMEM et
al., 2002, p. 163)
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 46/61
25/9/2007 / 46AED / PUC Minas / 2007-2
AED / Listas e PilhasAED / Listas e Pilhas
 Pilha
 Definição
 “Uma pilha é uma lista linear em que todas as
inserções, retiradas e, geralmente, todos os acessos
são feitos em apenas um extremo da lista.”
(ZIVIANO, 2004, p. 72)
 Comportamento
 LIFO – Last In Last Out = Pilha

“Último a entrar, primeiro a sair” (CORMEM etal., 2002, p. 163)
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 47/61
25/9/2007 / 47AED / PUC Minas / 2007-2
AED / FilasAED / Filas
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 48/61
25/9/2007 / 48AED / PUC Minas / 2007-2
AED / Operações simplesAED / Operações simples
 Operações simples (sobre elementos)
 Inserir
 Excluir
 Proximo

Anterior
 Minimo
 Máximo
 
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 49/61
25/9/2007 / 49AED / PUC Minas / 2007-2
AED / Operações sobre a listaAED / Operações sobre a lista
 Procurar elemento
 Inverter
 Vetor
 Lista encadeada

Lista duplamente encadeada
 Ordenar (método da bolha)
 Vetor
 Matriz
 Lista encadeada / lista duplamente encadeada
 
AED / Pilh
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 50/61
25/9/2007 / 50AED / PUC Minas / 2007-2AED / PilhaAED / Pilha
 Implementação com vetor estático
 Implementação com vetor dinâmico
 Implementação com STL “vector”
 Implementação com alocação dinâmica de
células / lista encadeada linear
 
A / ilh / ClAED / Pilh / Cl (S )(STL)
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 51/61
25/9/2007 / 51AED / PUC Minas / 2007-2
AED / Pilha / ClasseAED / Pilha / Classe vectorvector (STL)(STL)
 Classe “vector” da Standard Template
Library
 #include <vector>
 Declaração
 vector<int> vec_one;

Desempilhavoid pop(vector<int>& v)
{
v.erase( v.end()-1, v.end() ) ;
}
 Empilha
 vec_one.push_back(9);
 
AED / Lista duplamenteAED / Lista duplamente
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 52/61
25/9/2007 / 52AED / PUC Minas / 2007-2
AED / Lista duplamentep
encadeada (ou lista ligada)encadeada (ou lista ligada)
 Fonte: (CORMEM et al., 2002, p. 166)
 
AED / Li d d hAED / Li t d d h
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 53/61
25/9/2007 / 53AED / PUC Minas / 2007-2
AED / Lista encadeada.hAED / Lista encadeada.h
// Tipo de dados de cada elemento individual da Pilha
class ElementoLista
{
public:
int codigo;
ElementoLista* proximo;
ElementoLista* anterior;
}; //class ElementoLista
 
AED / Li t d d hAED / Li t d d h
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 54/61
25/9/2007 / 54AED / PUC Minas / 2007-2
AED / Lista encadeada.hAED / Lista encadeada.h
/*
* No description
*/
class ListaEncadeada
{
private:
int tamanho;ElementoLista* primeiro;
ElementoLista* ultimo;
public:
// class constructor
ListaEncadeada();
// class destructor
~ListaEncadeada();
int insereElemento( int codigo );
int obtemTamanho( int &tam );
int excluiElemento( int codigo );
ElementoLista* encontraElemento( int codigo );
// Métodos de entrada e saída
void ListaEncadeada::imprimeTamanho();
void ListaEncadeada::imprimeElementos();
void ListaEncadeada::imprimeMenu();
};
 
AED / Li t i lAED / Li t i l
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 55/61
25/9/2007 / 55AED / PUC Minas / 2007-2
AED / Lista circularAED / Lista circular
 Sentinelas (CORMEM et al., 2002, p. 163)
 Lista circular implementada com lista
encadeada
 
AED / Li t i l tAED / Lista circular com etor
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 56/61
25/9/2007 / 56AED / PUC Minas / 2007-2
AED / Lista circular com vetorAED / Lista circular com vetor
 (ZIVIANI, 2004, p. 82)
 
Res moResumo
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 57/61
25/9/2007 / 57AED / PUC Minas / 2007-2
ResumoResumo
 O entendimento da linguagem (C++) e dos
princípios da orientação a objetos, bem
como das estruturas de dados básicas, é
fundamental para a modelagem de
problemas computacionais mais
complexos.
 
GlossárioGlossário
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 58/61
25/9/2007 / 58AED / PUC Minas / 2007-2
GlossárioGlossário
 Variáveis
 Escopo
 Passagem de parâmetros
 Funções, procedimentos e métodos
 TAD - tipo abstrato de dados
 AED - algoritmo e estrutura de dados
 Programa +
 TADs
 POO - programação orientada a objetos
 STL – Standard Template Library
 
GlossárioGlossário
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 59/61
25/9/2007 / 59AED / PUC Minas / 2007-2
GlossárioGlossário
 OO: Orientada a Objeto
 
ReferênciasReferências
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 60/61
25/9/2007 / 60AED / PUC Minas / 2007-2
ReferênciasReferências
 CORMEM; LEISERSON; RIVEST;
STEIN. Algoritmos: teoria e prática.
Campus, 2002.
 STROUSTRUP, Bjarne. C++
Programming Language. 3ed. Addison-
Wesley, 1997.
 KERNIGHAN, Brian W.; RITCHIE,
Dennis M. The C Programming Language.
PrenticeHall.Englewood Cliffs, New
Jersey. 1978.
 
Onde obter mais informaçõesOnde obter mais informações
5/8/2018 Apostila-de-C++ - slidepdf.com
http://slidepdf.com/reader/full/apostila-de-c-559bf457d3ee1 61/61
25/9/2007 / 61AED / PUC Minas / 2007-2
Onde obter mais informaçõesOnde obter mais informações
 Email
 rfmatheus@yahoo.com.br
 Homepage
 http://rfmatheus.com.br/content/blogcategory/16/28/ 
 LearnLoop
 http://ww.inf.pucminas.br/learnloop

Continue navegando