Ver Mensaje Individual
  #1 (permalink)  
Antiguo 31/03/2010, 08:46
eduardor2k
 
Fecha de Ingreso: enero-2007
Mensajes: 8
Antigüedad: 17 años, 10 meses
Puntos: 0
Exclamación Duda con punteros

Hola a todos.
Tengo que hacer una práctica para la universidad y no consigo entender bien el funcionamiento de los punteros, antes que nada quiero aclarar que no busco que andie me haga el ejercicio, sencillamente porque son muchas cosas y llevaría su tiempo, además a mi me gusta programar xD.

Bueno empecemos:

Tengo una preciosa clase llamada ListaInvestigadores, que como habeis acertado se trata de un vector de punteros que apunta a objetos del tipo Investigador, a que mola!

Código:
class ListaInvestigadores
{
    public:
        ListaInvestigadores();
        Investigador get(unsigned pos);
        void insertar(Investigador i);
        void eliminar(unsigned pos);
        void set(unsigned pos, Investigador i);
        int size();
        string toString();
    private:
        int s;
        Investigador *l;
        Investigador **lArr;
};
Bueno, ahora mismo estoy programando el método insertar, me parece que es por lo que hay que empezar.

lo que tendría que hacer, si no estoy equivocado es:

crear un array nuevo de punteros que se de tamaño s(numero de elementos) + 1, copiar los elementos del array antiguo y agregar la direccion del investigador que me pasan al final de todo, para terminar debo decirle a lArr que apunte al array nuevo para sustituirlo.

Tengo unas dudas.

1. La mas importante, lo que he hecho y programado es lo mismo.
2. Cuando finaliza el método no debería borrar las variables declaradas dentro de él, con esto me refiero a que el array nuevo debería desaparecer y por consiguiente, la dirección que apunta lArr al final, no debería apuntar a nada?

Ahora os dejo el código de lo que he implementado:

PD: Teneis libertad de criticarlo todo lo que querais.

Código:
void ListaInvestigadores::insertar(Investigador i)
{
    Investigador **lArrNuevo;
    lArrNuevo = new Investigador * [s+1];
    if(lArrNuevo == 0)
        cout << "Ha sucedido un problema al crear el puntero lArrNuevo";
    else
    {
        for(int j=0; j < s; j++)
            lArrNuevo[j] = lArr[j];
        lArrNuevo[s] = &i;
        cout << lArrNuevo[s]->toString();
        s++; // Incrementamos en 1 el numero de Investigadores
        lArr = lArrNuevo;
    }
}
Gracias a todos lo que os paseis por aquí y dediqueis 5 min a leer este tostón.

Saludos, Eduardo