Programación Gráfica
8. Clases y objetos
Clases
Clases
• En Programación orientada a objetos, cada objeto del
mundo real puede ser presentado como una clase en el
programa.
• Se pueden instanciar múltiples objetos de esa clase,
cada una con diferentes atributos.
Declaración
class <identificador de clase>
{
<lista de miembros>
};
Especificadores de acceso
class <identificador de clase>
{
public:
<lista de miembros>
private:
<lista de miembros>
protected:
<lista de miembros>
};
Especificadores de acceso
class Jugador
{
private:
MovType mov_type;
Sprite* sp;
float velocity;
public:
Jugador(SceneManager* sm);
void Move(MovType type);
void Stop(MoveType type);
void LoopJugador();
};
Especificadores de acceso
• Acceso privado, private:
– Los miembros privados de una clase sólo son
accesibles por los propios miembros de la clase, pero
no desde funciones externas o desde funciones de
clases derivadas.
• Acceso publico, public:
– Cualquier miembro público de una clase es accesible
desde cualquier parte donde sea accesible el propio
objeto.
Especificadores de acceso
• Acceso protegido, protected:
– Con respecto a las funciones externas, es
equivalente al acceso privado, pero con respecto a
las clases derivadas se comporta como público
Constructores
• Son funciones especiales que nos permiten inicializar el
objeto asociado a la clase, y así mismo inicializar todos
sus valores.
• Tienen el mismo nombre que la clase, no retornan
ningún valor y por lo general son public.
Constructores
Jugador::Jugador(SceneManager* sm)
{
this->sp = sm->CreateSprite("naveJugador","nave.bmp",0.0f,0.0f);
this->velocity = 2.0f;
this->mov_type = MovType::MOV_NONE;
}
Sobrecarga de constructores
• Al igual que las funciones, éstas se pueden sobrecargar
de igual manera.
Jugador(SceneManager* sm);
Jugador(SceneManager* sm, int x, int y);
Jugador(SceneManager* sm, int x, int y, char name[50]);
Creación de objetos
• Para crear un objetos se debe asignar espacio en
memoria para dicho objeto y sus componentes.
• Para ir al espacio de memoria asignado se ocupan
PUNTEROS.
• Un objeto no es más que una instancia de una clase, y
por lo tanto se pueden crear tantas instancias como
memoria se tenga.
Objetos
• Para crear objetos se utiliza el operador * y la palabra
reservada new.
• Jugador* jugador1 = new Jugador(sm)
• Jugador* jugador2 = new Jugador(sm, 0, 100);
• Jugador* jugador3 = new Jugador(sm, 0, 100, “Terminator”);
Funciones
• Cada clase puede tener funciones que representarán las
acciones que puede realizar un objeto en el mundo real
-> POO.
• Ejemplo:
– Un Soldado puede: Disparar, Correr, Cargar su arma, etc.
– Un Auto puede: Aplicar Turbo, Avanzar, Girar, etc.
Funciones - Ejemplo
• Se tiene una enumeración que indique los movimientos que puede
hacer un jugador.
enum MovType
{
MOV_NONE,
MOV_UP,
MOV_RIGHT,
MOV_LEFT,
MOV_DOWN
};
Funciones - Ejemplo
void Jugador::Move(MoveType mov_Type)
{
switch(mov_type)
{
case MOV_UP:
sp->SetPosition(sp->getPositionX(), sp->getPositionY() - velocity);
break;
case MOV_LEFT:
sp->SetPosition(sp->getPositionX() - velocity, sp->getPositionY());
break;
case MOV_RIGHT:
sp->SetPosition(sp->getPositionX() + velocity, sp->getPositionY());
break;
case MOV_DOWN:
sp->SetPosition(sp->getPositionX(), sp->getPositionY() + velocity);
break;
default:
break;
}
}
Funciones
• Para llamar a las funciones de un objeto se ocupa el operador ->
jugador1->Move(MoveType::MOV_DOWN);
jugador2->Move(MoveType::MOV_UP);
Destructores
• Sirven para eliminar un objeto de una clase
determinada, liberando memoria utilizada por el objeto.
~WorldManager()
{
delete background;
delete jugador;
delete sm;
}
C++ .NET
• En C++ .NET las clases son administradas, esto quiere
decir que el entorno provee servicios automáticos al
código que se ejecuta.
• Para declarar una clase se utiliza la palabra reservada “ref”.
ref class Jugador
{
<cuerpo>
};
C++ .NET
• Para asignar memoria y crear objetos se utiliza el
operador ^ y la palabra reservada gcnew.
Jugador^ jugador = gcnew Jugador(sm);
• Para llamar a funciones del objeto, es lo mismo que en c++
standar.
jugador->Mover(MoveType::MOV_UP);
Descargar

Diapositiva 1