Escolar Documentos
Profissional Documentos
Cultura Documentos
BCC702-Programao de Computadores II
Emiliana Mara Lopes Simes simoes.eml@gmail.com
Ponteiros
Denio: Um ponteiro uma varivel que contm um endereo de memria como valor. Normalmente trata-se do endereo de outra varivel na memria Observaes:
Uma varivel faz referncia direta para um valor especco Um ponteiro contm o endereo de uma varivel que possui um valor armazenado
Ponteiros
Ponteiros
Ponteiros
Ateno Ponteiros apontam para variveis do mesmo tipo. Isto , ponteiro para um int aponta para o endeo de um nmero inteiro (int) Inicialize os ponteiros para evitar resultados indesejados (importantssimo!!!) Um ponteiro com o valor 0 ou NULL no aponta para NADA (Ponteiro nulo)
Ponteiros
Operadores de Ponteiros
& (operador de endereo): Operador unrio que retorna o endereo de memria do seu operando Exemplo:
int x = 0; //declara a varivel x int *px; px = &x; //declara um ponteiro para inteiro /* coloca em px o endereo de memria da varivel x */
Operadores de Ponteiros
Operadores de Ponteiros
Ateno: O operador & no pode ser aplicado a expresses e constantes Exemplos:
Operadores de Ponteiros
* (operador de indireo): Operador unrio que manipula um ponteiro. Retorna um sinnimo para a varivel apontada Exemplo:
int x = 0; //declara a varivel x int *px; px = &x; //declara um ponteiro para inteiro /* coloca em px o endereo de memria da varivel x */ /* atualiza o valor armazenado na varivel x para 10 */
(*px) = 10;
Se uma funo deseja alterar variveis da funo chamadora, podemos usar ponteiros
A alocao dinmica de memria permite ao programador o controle total sobre o tempo de vida das variveis Atravs dos operadores new e delete, o programador consegue criar e destruir (respectivamente) variveis de um determinado tipo Ao criar uma nova varivel com o operador new esta varivel no est sujeita s regras de escopo das variveis locais. A varivel criada com o operador new apenas pode ser destruda atravs do operador delete
O operador new pode ser usado para alocar dinamicamente memria para:
1 2 3
Tipos bsicos (int, double, char... etc) Vetores Tipos denidos pelo usurio (Classes)
O operador new recebe como parmetro o tipo de dados da varivel que se quer criar e devolve um ponteiro para a nova varivel criada Ao operador delete passado o ponteiro para uma varivel criada com o operador new (o que destrudo o apontado pelo ponteiro e no o prprio ponteiro!)
Data::Data(){ setData(1, 1, 0); } Data::Data(int d, int m, int a){ setData(d, m, a); } void Data::print(){ cout<<setw(2)<<setfill(0)<<dia <</<<setw(2)<<mes<</<<ano<<endl; } Arquivo: Data.cpp
#include <iostream> #include Data.h using namespace std; int main() { Data *d = new Data; d->print(); delete d; system(PAUSE); return 0; } Arquivo: Principal.cpp
#include <iostream> #include Data.h using namespace std; int main() { Data *d = new Data(5, 10, 2009); d->print(); delete d; system(PAUSE); return 0; } Arquivo: Principal.cpp
Sada: 01/01/2010 02/01/2010 03/01/2010 04/01/2010 05/01/2010 06/01/2010 07/01/2010 08/01/2010 09/01/2010 10/01/2010 Press any key to continue...
Mtodo Destrutor
O destrutor um mtodo especial chamado quando um objeto da classe destrudo. Ele possui as seguintes propriedades: Tem o mesmo nome da classe precedido por ~ ; No tem valor de retorno, nem mesmo void; No possui parmetros; Uma classe s pode ter um destrutor.
Mtodo Destrutor
Mtodo Destrutor para a classe Data
class Data{ public: Data(); Data(int d, int m, int a); ~Data(); //destrutor void print(); void setData(int d, int m, int a); private: int dia; int mes; int ano; }; Arquivo: Data.h
Mtodo Destrutor
Arquivo: Data.cpp
Mtodo Destrutor
#include <iostream> #include Data.h using namespace std; int main() { Data *d = new Data; d->print(); delete d; system(PAUSE); return 0; } Arquivo: Principal.cpp
Mtodo Destrutor
Mtodo Destrutor
O destrutor pode ser usado, por exemplo, para desalocar memria que foi alocada dinamicamente na classe
<< endl;
Arquivo: Evento.cpp
#include <iostream> #include Evento.h using namespace std; int main() { Evento *e = new Evento(Carnaval, 16, 2, 2010); e->print(); delete e; system(PAUSE); return 0; } Arquivo: Principal.cpp
Sada: Evento: Carnaval 16/02/2010 Destrutor Evento... Destrutor Data... Press any key to continue...
Dvidas?
Prxima Aula