[C con Clase] ayuda con el siguiente codigo

Salvador Pozo salvador en conclase.net
Sab Dic 22 20:35:23 CET 2012


Hola, Antonio:

Efectivamente, la clase sdl_sprite contiene y manipula un array de frames. Y efectivamente, usa memoria dinámica.

Supongo que aún no estás muy familiarizado con C++ y POO, ya que me parece bastante claro cómo utiliza esta clase la memoria dinámica.

La clase dispone de dos constructores, uno con un argumento de tipo int, que indica el número de frames, el otro sin argumentos, y en ese se asume un único frame.

----8<------
sdl_sprite::sdl_sprite(int nf) {
     sprite=new SDL_Frame[nf];
     nframes=nf;
     cont=0;
}
sdl_sprite::sdl_sprite() {
     int
     nf=1;
     sprite=new SDL_Frame[nf];
     nframes=nf;
     cont=0;TRUE
}
----8<------

Los dos constructores crean un array de nf elementos de la clase SDL_Frame.

(No sé qué hace el último "TRUE", creo que es un error).

A mi modo de ver, no es la forma más eficaz de plantear esta clase. Se podría haber usado un único constructor, con un valor por defecto para el parámetro nf.

Además, cualquier clase que use asignación dinámica de memoria debería implementar un constructor para liberar esa memoria. Lo mismo se puede aplicar a la clase SDL_Frame, que no dispone de constructor o destructor, pero implementa una función "elimina", que hace la tarea de un destructor. La desventaja es que tendrás que invocarla de forma explícita, en lugar de dejar el programa destruya los objetos de forma implícita.

Para pode usar la clase sdl_sprite necesitas saber antes cuantos frames contiene el sprite, crear el objeto, y luego añadir cada frame uno a uno. No hay métodos para añadir frames a un objeto sdl_sprite, así que no es posible modificar el tamaño del array una vez creado el objeto.

Si tienes alguna duda concreta con este u otro código, pregunta de nuevo. Comentar una implementación de una clase completa resultaría demasiado largo.

Hasta pronto.

-- 
Salvador Pozo (Administrador)
mailto:salvador en conclase.net


Más información sobre la lista de distribución Cconclase