Crear un arreglo de objetos con el constructor

Iniciado por ThronerAXE, 15 Febrero 2014, 03:52 AM

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

ThronerAXE

Buenas, hize este pequeño codigo para practicar y entender lo de los constructores y más aun, sobre asignar memoria dinamica para vectores, sin embargo hay algunas cosas q no logro entender...
primero q todo el metodo obj.mostrar() no funciona bien, pues si yo le asigno al vector 3 posiciones, puedo guardar las 3 posiciones(o almenos eso creo), pero cuando las quiero mostrar, solo sale la de la ultima posicion, a que se debe eso??
lo segundo es sobre el puntero *vector, la verdad nose que significa, y tampoco se porque se le declara como char
alguien me puede explicar porfavor ???

Código (cpp) [Seleccionar]
#include <iostream.h>
class Numero
{
   private:
         int x;
         int y;
         char *vector;
   public:
         Numero(int n);
         void carga();
         void mostrar();
};
Numero::Numero(int n)
{
  vector=new char[n];
}
void Numero::carga()
{
  cout<<endl<<"Ingrese X y Y: ";
  cin>>x>>y;
}
void Numero::mostrar()
{
   cout<<endl<<"X: "<<x<<endl<<"Y: "<<y<<endl;
}
void main()
{
  int col,i;
  cout<<"Ingrese las posiciones del vector: ";
  cin>>col;
  Numero obj(col);
  for( i=0;i<col;i++)
  {
    obj.carga();
  };
  for(i=0;i<col;i++)
  {
    obj.mostrar();
  };
  system("pause");
}

eferion

Tienes un error de concepto. La clase "Numero" almacena las coordenadas X e Y. Si tu quieres almacenar varias de estas coordenadas, entonces lo que necesitas es un vector de tipo "Numero"... no un vector de tipo ... "char???"

Además... el vector debe estar, necesariamente, fuera de la clase Numero.

Otro detalle a tener en cuenta es que si en el constructor de una clase haces un new necesariamente ha de existir un delete en el destructor... destructor que no tienes implementado.

Código (cpp) [Seleccionar]

class Numero
{
   private:
         int x;
         int y;

   public:
     Numero( )
       : x( 0 ),
         y( 0 )
     { }

     void cargar( )
     {
       cout<<endl<<"Ingrese X e Y: ";
       cin>>x>>y;
     }
 
     void mostrar( )
     { std::cout << x << " " << y << std::endl; }
};

class ListaNumeros
{
  public:
    ListaNumeros( int numero )
    { numeros = new Numero[ numero ]; }

    ~ListaNumeros( )
    { delete[] numeros; }

    void cargar( int numero )
    { numeros[ numero ].cargar( ); }

    void mostrar( int numero )
    { numeros[ numero ].mostrar( ); }

  private:
    Numero* numeros;
}

void main()
{
  int col;
  cout<<"Ingrese las posiciones del vector: ";
  cin>>col;
  ListaNumeros lista( col );

  for( int i=0;i<col;i++)
  {
    lista.cargar(i);
  };
  for(i=0;i<col;i++)
  {
    lista.mostrar(i);
  };
  system("pause");
}


Este código aún es muy mejorable, pero eso ya te lo dejo a tí.