Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Classes
Abstração
• A forma abstração utilizada para criar Tipos
Abstratos de Dados (TAD).
• Linguagem C:
– struct
• Linguagem C++:
– class
typedef struct {
int x, y, z;
} PONTO_R3;
class PONTO_R3 {
int x, y, z;
} ;
Classe
• Consegue reunir variáveis (atributos da
classe) e funções (métodos da classe) para
operarem os atributos.
Método Construtor
• Método ou função construtora.
• Método especial que possui o mesmo nome
da classe.
• É sempre evocado quando é criado uma
instância da classe (um objeto da classe).
Método Construtor
• Uma classe pode ter vários métodos
construtores, obtendo assim várias interfaces
para instanciar uma classe.
• Não retornam nada.
• Geralmente inicializam os atributos da classe
com valores e/ou reservam memória dinâmica
(heap).
Método Destrutor
• Método ou função destrutora.
• Método especial que é evocado (chamado)
sempre no final de vida da instância da classe
(objeto da classe).
• Possui o mesmo nome da classe precedido por
um ~.
• Não retorna nenhum valor.
• Realiza a liberação de memória alocada de forma
dinâmica no heap.
Exemplo de uma Classe
class Ponto {
private:
double x, y;
public:
Ponto(double x, double y) {
this->x = x;
this->y = y;
}
double Ret_x() { return x; }
double Ret_y() { return y; }
};
Atributos da classe
Métodos da classe
Referência this
• Toda instancia (objeto) criado tem uma
referencia (ponteiro) this.
• Pode-se referenciar atributos e métodos da
classe.
• Utilizado muitas vezes para distinguir as
variáveis locais aos métodos que possuem o
mesmo nome.
Exemplo da Referência this
class Ponto {
private:
double x, y;
public:
Ponto(double x, double y) {
this->x = x;
this->y = y;
}
double Ret_x() { return x; }
double Ret_y() { return y; }
};
Tem-se as variáveis locais
x e y que prevalecem
para diferenciar o x e y da
classe utiliza-se o this
Mais de um Método Construtor
class Ponto {
public:
double x, y;
public:
Ponto(double x, double y) {
this->x = x;
this->y = y;
}
Ponto(Ponto & P) {
x = P.Ret_x();
y = P.Ret_y();
}
double Ret_x() { return x; }
double Ret_y() { return y; }
void Mostrar(void (*f)(Ponto P)) {
Ponto P(x,y);
f(P);
}
};
#include <stdio.h>
#include "ponto.h“
void Mostrar(Ponto P) {
printf("\n(%.2lf,%.2lf)",P.Ret_x(),P.Ret_y());
}
int main(int argc, char *argv[]) {
Ponto P(10,20);
Ponto P1(20,20);
P1.Mostrar(Mostrar);
Ponto P2(P1);
P2.Mostrar(Mostrar);
return 0;
}
class Vetor {
public:
int tam;
double *v;
public:
Vetor(int tamanho) {
tam = tamanho;
v = (double *) malloc(sizeof(double) * tam);
. . . . . .
. . . . . .
}
~Vetor() {
free(v);
}
};
#include “vetor.h”
int main(int argc, char *argv[]) {
Vetor V(10);
. . . . . .
. . . . . .
. . . . . .
}
vetor.h
principal-vetor.cpp
class Vetor {
public:
int tam;
double *v;
public:
vetor(int tamanho) ;
double elemento(int i);
void elemento(double e, int i) ;
Mostrar(void (*f)(Vetor));
. . . . . .
. . . . . .
~vetor();
};
#include “vetor.h”
int main(int argc, char *argv[]) {
Vetor V(10);
V.elemento(12,4);
double x = V.elemento(4);
. . . . . .
}
Vetor :: vetor(int tamanho) {
. . . . . .
}
double Vetor :: elemento(int i) {
return (v[i]);
}
void Vetor :: elemento(double e, int i) {
v[i] = e;
}
void Vetor :: Mostrar(void (*f)(Vetor)) {
. . . . . .
}
Vetor :: ~vetor() {
. . . . . .
};
vetor.h
principal-vetor.cpp
vetor.cpp