"Arrays de clases, pasados como argumento a una funcion"

Iniciado por Sauruxum, 27 Octubre 2010, 21:12 PM

0 Miembros y 1 Visitante están viendo este tema.

Sauruxum

Buenas.

Haciendo un programita, para cojer practica me tope con una dificultad, mas bien no entiendo cual debe ser la sintaxis que debo usar.
Al grano.

Tengo una clase "soldaditos", a los soldaditos los inicializo con numero de matricula y rango militar xD.


class soldadito{
  private:
    int matricula, rango;
  public:
    soldadito ( int a, int b ){
      a=matricula;
      b=rango;
    };
};


Ahora, como quiero tener un ejercito de soldaditos hago un array de soldaditos:


   soldadito *soldado[100];

  ...
  ...

//Todos son reclutas ( rango 1 xD )
  for (i=0; i<100; i++ ){
    soldado[i]= new soldadito( i, 1 )
  }



Ahora mi duda es, teniendo las cosas asi como estan, como hago a pasar el array soldado[100] o digamos en su defecto soldados[EJERCITO] ( con EJERCITO una constante ya definida ) como argumento de alguna funcion?
La cosa es que me hago bola con los punteros y no comprendo como debo pasarlos con los arrays.
Sin los arrays lo hubiera hecho:


void ( soldadito& s )


Pero con el array me complico.
Espero haber hecho clara la pregunta.

Saludos.

p.d. los personajes usados son ficticios, cualquier relacion con la realidad es pura coincidencia...

carlitos_jajajajaja

No estoy de acuerdo con la guerra pero te voy a ayudar igual LOL


Cuando tu creas un array en realidad lo que estas haciendo no es nada mas q usar un puntero constante :p

y como el puntero almacena las direcciones de los objetos, simplemente tienes que pasar el array por valor y funcionara perfecto en otras palabras:
Código (cpp) [Seleccionar]


#include <iostream>

using namespace std;

class soldadito{
  public://Modificado pa q mi ejemplo funcione :)
    int matricula, rango;
  public:
    soldadito ( int a, int b ){
      a=matricula;
      b=rango;
    };
};

void promover_al_primero(soldadito* division[]) //osea un array de punteros a soldadito
{
     division[0]->rango = 2;
}


int main()
{
     soldadito *soldado[100];

//  ...
  //...

//Todos son reclutas ( rango 1 xD )
  for (int i=0; i<100; i++ ){
    soldado[i]= new soldadito( i, 1 );
  }

  promover_al_primero(soldado);

  cout << "El rango del primer soldado es: " << soldado[0]->rango << endl;

}



Una aclaracion, para acceder a un miembro de clase se usa el punto (soldadito.rango etc) pero cuando es un puntero a soldadito no se usa punto, sino flechita XD  soldadito->rango

Sitienes alguna pregunta hazla a alguien mas pq no visito este foro muy seguido jajajaja


PS: Trata de leer sobre punteros, es muy importante q tengas buena base en eso si quieres adentrar en programacion c/c++
Merodeo los foros, esperando el momento de decir algo inteligente...

Se necesita paciencia

Sauruxum

Bueno, digamos que una buena base de punteros la tengo, solo que me hice bola por el mismo hecho que el array puede ser un puntero al primer miembro, la clase la declare como puntero y para modificar las variables dentro de la funcion debo pasar un valor por referencia  ;-)
Pero siempre que hago estas preguntas me quedo amargo cuando veo que la solucion no era dificil xD
Muchas gracias

Saludos