[C++ @ i386] Problema con clases, funciones repetidas

[C++ @ i386] Problema con clases, funciones repetidas

      • 193
      • mensajes
      • miembro desde
      • 25/09/03
    #1 [C++ @ i386] Problema con clases, funciones repetidas

    Descubrí que estoy repitiendo muchisimo código, pero no
    pude encontrar la solución para no repetirlo.
    Acá hice un resumen del problema, traté de usar
    funciones virtuales pero sin éxito, tengo poca experiencia en elllas.
    Bueno por eso lo dejo acá en el foro por si alguien sabe como solucionar esto.

    Supongamos que tengo una clase punto, y clases derivadas con formas
    de objetos, cuyo objeto principal es justamente un ARREGLO de puntos
    que contiene varios puntos ubicados segun la forma.

    //-----------------------------------------------------------------
    class punto
    {int x;
    int y;
    //..
    public:
    void dibuja(void);
    //..
    };
    //-----------------------------------------------------------------
    class circulounto
    {//..
    int cant;
    punto *puntos;
    public:
    void dibuja(void);
    //..
    };
    //-----------------------------------------------------------------
    class lineaunto
    {//..
    int cant;
    punto *puntos;
    public:
    void dibuja(void);
    //..
    };

    //.. es para indicar otras lineas....
    //observar que estas funciones son exactamente iguales
    //-----------------------------------------------------------------
    void linea::dibuja(void)
    {for(int i;i puntos[i].dibuja();
    }
    //-----------------------------------------------------------------
    void circulo::dibuja(void)
    {for(int i;i puntos[i].dibuja();
    }
    //-----------------------------------------------------------------

    El problema es que las funciones "dibuja" son exactamente iguales
    y estoy tentado a usar una sola funcion dibuja para todas las formas.

    Se agradece cualquier idea!!

  1. ¿Este tema te pareció interesante? Compártelo!

    ¿No es lo que buscabas? Intenta buscar un tema similar

    2 comentarios / 3378 Visitas

      • 10,218
      • mensajes
      • miembro desde
      • 07/06/04
    01/01/2005
    #2 Re: [c++ problema con clases, funciones repetidas| (any) @ (I386)]

    Sencillamente tenés que sobrecargar el método dibuja() en las clases derivadas llamando al mismo método de la clase padre. Lo hacés así:

    Código:
       /* Tomamos de ejemplo tu clase circulo (que debería ser Circulo
       * Respetemos las convenciones de escritura de código, plz */
       
       void Circulo:: dibuja () : Punto.dibuja() 
       {
    /* Incluir el código adicional que se precise, en caso que tenga * que hacer algo más aparte de lo que hace el código de la clase padre, * en caso contrario, dejar las llaves vacías y punto. */
    }
    Aunque, me corrijo (agregado lunes 3 de enero)... si estás haciendo el método dibuja en la clase padre, no es necesario escribir una linea de código en las clases derivada si declarás a la función como un miembro public, ya que todos los public se heredan como tal (en una herencia tipo public). El código q tiré arriba, sirve si en las clases derivadas tenés que "sobrecargar" el método de la clase padre agregando determinada funcionalidad.

    Un ejemplo boludo: Imaginate una clase que maneje puntos en un plano y que tiene 2 coordenadas (x, y) y hago toooodo lo necesario para q maneje las 2 coordenadas. Ahora bien, genero una clase que maneja puntos pero en el espacio, por ende mis puntos ahora tienen 3 coordenadas (x, y, z), y puedo aprovechar todo lo que hice en mi clase punto, simplemente heredando de la clase punto, y "sobrecargando los métodos" para terminar de acomodar toda la lógica a la 3er coordenada (que es el eje Z).

    Se entendió el ejemplo??? Sino, buscalo mucho más detalladamente en algún buen libro de C++ (recomendados el de Deitel y el de Stroustrup), que es un ejemplo "clásico" cuando se explica herencia. Eso es algo que deberías leerte bien: HERENCIA, ya que te vas a encontrar como manejar estas cosas de una forma bastante piola.


    Espero q te sirva esto!!!!


    El doc
      • 193
      • mensajes
      • miembro desde
      • 25/09/03
    11/01/2005
    #3 Re: [c++ problema con clases, funciones repetidas| (any) @ (I386)]

    En realidad acá no puedo heredar el dibuja() de la clase Punto porque ahí usa solo x,y
    pero en las otras clases x,y viene a significar el centro del circulo o el extremo de la linea
    y el dibuja se refiere a punto *puntos que es un arreglo y no un punto.
    Se me ocurre la idea de hacer una clase intermedia que se llame Puntos, que herede de punto, contenga un arreglo de puntos y el dibuja para después hacer que las clases circulo y linea
    deriven de Puntos, en lugar de Punto, lo pruebo y después comento que pasó.
    Gracias