<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
FONT-SIZE: 10pt;
FONT-FAMILY:Tahoma
}
</style>
</head>
<body class='hmmessage'>
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:<BR>
 <BR>
<FONT size=1>class shape_c {<BR>    public:<BR>    <BR>    shape_c(){<BR>    x = rand() % 100;<BR>    y = rand() % 100;<BR>    col = rand() % 255 + 1;<BR>    xs = rand() % 10;<BR>    ys = rand() % 10;<BR>    }<BR>    <BR>    virtual void draw(BITMAP *bmp) const = 0;<BR>    <BR>    virtual void update() = 0;<BR>    <BR>    protected:<BR>              <BR>    int x,y;<BR>    int col;<BR>    int xs, ys;<BR>    int w,h;<BR>    int r;<BR>};<BR>  <BR>class circle_c : public shape_c {<BR>    public:<BR>  <BR>    circle_c(){   <BR>    r = rand() % 35; <BR>    }<BR>    <BR>    void draw(BITMAP *bmp) const;<BR>    <BR>    void update(){<BR>    x += xs;<BR>    y += ys;<BR>    if(x > SCREEN_W) xs *= -1;<BR>    if(y > SCREEN_H) ys *= -1;<BR>    if(x < 0) xs *= -1;<BR>    if(y < 0) ys *= -1;<BR>    }<BR>    <BR>    protected:<BR>    int r;    <BR>};</FONT><BR>
<FONT size=1>void circle_c::draw(BITMAP *bmp) const {<BR>     circlefill(bmp, x, y, r, col);<BR>     }</FONT><BR>
<FONT size=1>class square_c : public shape_c{<BR>    public:<BR>           <BR>    square_c(){<BR>    w = rand() % 50;<BR>    h  = rand() % 50;<BR>    }<BR>    <BR>    void draw(BITMAP *bmp) const;</FONT><BR>
<FONT size=1>    void update(){<BR>    x += xs;<BR>    y += ys;<BR>    if(x > SCREEN_W + w) x = 0;<BR>    if(y > SCREEN_H + h) y = 0;<BR>    }<BR>    <BR>    protected:<BR>    int w,h;<BR>};</FONT><BR>
<FONT size=1>void square_c::draw(BITMAP *bmp) const {<BR>    rectfill(bmp, x, y, x + w, y + h, col);<BR>    }</FONT><BR>
<FONT size=1></FONT> <BR>
Como verán hay una clase abstracta shape_c de la que derivan las clases square_c y circle_c, representando las respectivas figuras. Ahora bien, algunas de las variables que definen a una figura como sus coordenadas, su color y su velocidad, son comunes a cualquier figura (variables x, y, col, xs, ys). Sin embargo, algunas variables son especificas de cada figura, como r(radio), w (ancho) y h (altura). Y estas son la que traen problemas. Si las incluyo en sus respectivas clases (como hice en el código de arriba), el programa compila pero se cuelga al ejecutar. Si, en cambio, pongo las tres variables en la clase shape_c, el programa funciona perfectamente. Como verán una solución ya le encontré (más allá 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:<BR>
 <BR>
<FONT size=1>shape_c *circles = new circle_c[CIRCLE_NUMBER];<BR>shape_c *squares = new square_c[SQUARE_NUMBER];</FONT><BR>
<FONT size=1></FONT> <BR>
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.<BR>
 <BR>
Joaquin Ezpeleta.-<BR><br /><hr />Express yourself instantly with MSN Messenger! <a href='http://clk.atdmt.com/AVE/go/onm00200471ave/direct/01/' target='_new'>MSN Messenger</a></body>
</html>