Buscar

[Prof. Emiliana] Aula Prática 4

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 4 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

1 
UNIVERSIDADE FEDERAL DE OURO PRETO 
INSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICAS 
DEPARTAMENTO DE COMPUTAÇÃO 
BCC702 – PROGRAMAÇÃO DE COMPUTADORES II 
 
4a Aula prática de BCC702 – Alocação Dinâmica de Memória 
 
Um ponteiro é uma variável que contém um endereço de memória como valor. 
Normalmente trata-se do endereço de outra variável na memória 
 
Estrutura geral de uma declaração de ponteiro: 
 
<tipo> *<nome_da_variavel>; 
 
Operadores de Ponteiro: 
 
� & (operador de endereço): Operador unário que retorna o endereço de memória 
do seu operando; 
 
� * (operador de indireção): Operador unário que manipula um ponteiro. Retorna 
um sinônimo para a variável apontada 
 
Exemplo: 
 
#include <iostream> 
using namespace std; 
 
int main(){ 
 
 int x; //declara uma variável inteira 
 int *px; //declara um ponteiro do tipo int 
 
 px = &x; //atribui o endereço de x à px 
 
 *px = 0; //modifica o valor armazenado em x a partir de px 
 
 cout << "x: " << x << " *px: " << *px << endl; 
 
 system("pause"); 
 return 0; 
 
} 
<<saída>> 
x: 0 *px:0 
 
 
 2 
A alocação dinâmica de memória permite ao programador o controle total sobre o 
tempo de vida das variáveis. Através dos operadores new e delete, o programador 
consegue criar e destruir (respectivamente) variáveis de um determinado tipo. 
 
O operador new pode ser usado para alocar dinamicamente memória para tipos 
definidos pelo usuário. Veja exemplo para a classe Ponto. 
 
Exemplo da interface para a classe Ponto: 
#include <iostream> 
using namespace std; 
 
class Ponto{ 
 private: 
 int x; 
 int y; 
 
 public: 
 
 //Construtor: inicializa x e y com o valor 0 
 Ponto(); 
 
 //Construtor: inicializa x com o valor px e y com o valor py 
 Ponto(int px, int py); 
 
 void setCoordenadas(int px, int py); 
 void imprimirCoordenadas(); 
}; 
Ponto.h 
 
Exemplo de implementação da classe Ponto: 
#include "Ponto.h" 
 
Ponto::Ponto(){ 
 
 setCoordenadas(0, 0); 
 
} 
 
Ponto::Ponto(int px, int py){ 
 
 setCoordenadas(px, py); 
 
} 
 
void Ponto::setCoordenadas(int px, int py){ 
 
 x = px; 
 y = py; 
 
} 
 
void Ponto::imprimirCoordenadas(){ 
 
 cout << "Coordenadas do ponto(x, y): (" << x << ", " << y << ")"; 
 cout << endl; 
} 
Ponto.cpp 
 
 3 
Agora vamos utilizar a classe Ponto no programa principal. 
 
#include "Ponto.h" 
 
int main(){ 
 
 //alocação de memória dinamicamente 
 Ponto *p1 = new Ponto; //chama construtor sem parâmetros 
 Ponto *p2 = new Ponto(1, 2); //chama construtor com parâmetros 
 
 //acessando membros da classe 
 p1->imprimirCoordenadas(); 
 p2->imprimirCoordenadas(); 
 
 //desalocação de memória 
 delete p1; 
 delete p2; 
 
 system("pause"); 
 return 0; 
 
} 
<<saída>> 
 
Coordenadas do ponto(x,y): (0, 0) 
Coordenadas do ponto(x,y): (1, 2) 
Principal.cpp 
 
 
Exercícios 
 
1. Construa uma função que receba dois valores inteiros a e b, e calcule (utilizando 
ponteiros) o quociente, div, e o resto da divisão, mod, de a por b. A função deve 
retornar -1 caso não seja possível realizar as operações e 1 caso seja possível. Um 
programa para utilizar tal função deve ser criado, tratando o retorno da função. 
 
2. Crie uma classe para representar uma pessoa, com os atributos privados de nome, 
idade e telefone. Crie os métodos públicos necessários sets e gets e também um 
método para imprimir os dados de uma pessoa. 
 
3. Escreva um programa em C++ que mantenha um vetor de 100 ponteiros para 
objetos da classe Pessoa (inicialmente todos NULL). O programa deve permitir que 
o usuário digite dados de pessoas enquanto desejar (ou 100 pessoas já tenham sido 
lidas). Ao fim do cadastro de pessoas, o programa deve listar os dados de todas as 
pessoas digitadas e liberar a memória alocada até aquele momento. 
 
4. Usando os conhecimentos adquiridos nos exercícios anteriores, crie uma classe 
Agenda que armazena no máximo 30 pessoas e seja capaz de operações como: 
 
� Armazenar uma pessoa na agenda a partir do nome, idade e telefone dela; 
 
� Imprimir os dados de todas as pessoas da agenda; 
 
� Imprimir os dados de todas as pessoas que tenham um dado nome; 
 4 
 
� Imprimir os dados de todas as pessoas que tenham uma dada idade. 
 
Em seguida, implemente um programa para testar a sua classe Agenda. 
 
5. Implemente um método na classe Agenda para remover uma pessoa da agenda;

Continue navegando