[C con Clase] Devolver un array bidimensional

Alejandro alepelexo en yahoo.es
Lun Jun 16 21:58:14 CEST 2008


¡Hola listeros! Mi caso es el siguiente. Tengo una clase como la que muestro a continuación:

class Cuadricula
{
      private:
              int w, h;//Dimensiones de la cuaricula (a lo ancho y a lo alto)
              int **mapa;//Mapa de la cuadrícula
      public:
             Cuadricula(int alto, int ancho);
             int **GetCuadricula();

             ...

             ~Cuadricula();
};

En el constructor, lo que hago es convertir "**mapa" en un array bidimensional de dimensiones "alto" y "ancho", mediante memoria dinámica, de la siguiente forma:

    int k, n;//Contadores
    
    mapa = new int*[h];
    for(k = 0; k < h; k++)
    {
        mapa[k] = new int[w];
    }

Hasta ahí todo bien. Mi problema está en la función "GetCuadricula()". Como no quiero que se devuelva la dirección de memoria del mapa de la clase (para proteger los datos privados), los copio en un array bidimensional auxiliar:

    int k, n;
    int copy_mapa[h][w];
    
    for(k = 0; k < h; k++)
    {
        for(n = 0; n < w; n++)
        {
            copy_mapa[k][n] = mapa[k][n]
        }
    }

Ahora la pregunta es: ¿cómo hago para que la función "GetCuadricula()" devuelva ese array? La idea es que luego me pueda referir a él desde "main()" de la siguiente manera:

    Cuadricula mapa(10, 20);
    int **mapa_colisiones;
    int k, n;
    
    ...
    
    mapa_colisiones = mapa.GetCuadricula();
    
    for(k = 0; k < 10; k++)
    {
        for(n = 0; n < 10; n++)
        {
            if(mapa_colisiones[k][n] != 0)
            {
                ...
            }
        }
    }
    
    ...

Se me ocurrió pasar como parámetro a la función "GetCuadricula()" un array en el que se copiaría el mapa del objeto, pero ahora que se me planteó este problema me gustaría saber también la solución. Espero que me podáis ayudar.

Un saludo, Alejandro.


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