[C con Clase] Problema con Clases abstractas.

Steven R. Davidson vze266ft en verizon.net
Vie Feb 15 19:20:44 CET 2008


Hola Joaquín,

Joaquin Ezpeleta wrote:
> Buenas tengo un pequeño problema que me tiene desconcertado. Estoy 
> trabajando en un programa gráfico muy simple usando Allegro y hasta 
> ahora todo funcionaba muy bien. El problema lo tengo con este código:
>  

[CORTE]

> del minimo desperdicio de memoria y la pedida de claridad), pero lo que 
> me importa más que nada es saber por qué pasa esto, puesto que estoy 
> siguiendo casi al pie de la letra el ejemplo que se da en el curso 
> (seccion "Clases abstractas"). Por si tiene algo que ver los objetos se 
> definen de la siguiente manera:
>  
> shape_c *circles = new circle_c[CIRCLE_NUMBER];
> shape_c *squares = new square_c[SQUARE_NUMBER];
>  
> Espero que puedan solucionar esta pequeña duda que tengo. Muchas gracias 
> desde ya y mis felicitaciones por la calidad y el rigor del curso y 
> sobre todo por su gran dedicación.
>  

Sigues el ejemplo del capítulo 38, pero no el del capítulo 37 el cual 
usa un array de punteros a la clase base. Esto es lo que necesitas 
hacer. Debes manipular los objetos virtuales a través de punteros (o 
referencias) a 'shape_c'. Sin embargo, en tu ejemplo, creas varios 
objetos de tipo 'circle_c' y de 'square_c', en lugar de arrays de 
punteros a 'shape_c'. Esto es,

shape_c **circles = new shape_c *[CIRCLE_NUMBER];
shape_c **squares = new shape_c *[SQUARE_NUMBER];

// Instanciar los objetos
for( int i=0; i<CIRCLE_NUMBER; i++ )  circles[i] = new circle_c;
for( int i=0; i<SQUARE_NUMBER; i++ )  squares[i] = new square_c;

Si el array fuese estático, entonces escribiríamos el código de esta manera:

shape_c *circles[CIRCLE_NUMBER];
shape_c *squares[SQUARE_NUMBER];

// Instanciar los objetos
for( int i=0; i<CIRCLE_NUMBER; i++ )  circles[i] = new circle_c;
for( int i=0; i<SQUARE_NUMBER; i++ )  squares[i] = new square_c;

Esto es parecido al ejemplo del capítulo 37; puedes consultarlo yendo a: 
http://c.conclase.net/curso/index.php?cap=037#039_constructores


Espero que esto aclare la duda.

Steven






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