Baixe o app para aproveitar ainda mais
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;
Compartilhar