Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ThronerAXE en 15 Febrero 2014, 03:52 am



Título: Crear un arreglo de objetos con el constructor
Publicado por: ThronerAXE en 15 Febrero 2014, 03:52 am
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
  1. #include <iostream.h>
  2. class Numero
  3. {
  4.   private:
  5.         int x;
  6.         int y;
  7.         char *vector;
  8.   public:
  9.         Numero(int n);
  10.         void carga();
  11.         void mostrar();
  12. };
  13. Numero::Numero(int n)
  14. {
  15.  vector=new char[n];
  16. }
  17. void Numero::carga()
  18. {
  19.  cout<<endl<<"Ingrese X y Y: ";
  20.  cin>>x>>y;
  21. }
  22. void Numero::mostrar()
  23. {
  24.   cout<<endl<<"X: "<<x<<endl<<"Y: "<<y<<endl;
  25. }
  26. void main()
  27. {
  28.  int col,i;
  29.  cout<<"Ingrese las posiciones del vector: ";
  30.  cin>>col;
  31.  Numero obj(col);
  32.  for( i=0;i<col;i++)
  33.  {
  34.    obj.carga();
  35.  };
  36.  for(i=0;i<col;i++)
  37.  {
  38.    obj.mostrar();
  39.  };
  40.  system("pause");
  41. }


Título: Re: Crear un arreglo de objetos con el constructor
Publicado por: eferion en 16 Febrero 2014, 18:38 pm
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
  1. class Numero
  2. {
  3.   private:
  4.         int x;
  5.         int y;
  6.  
  7.   public:
  8.     Numero( )
  9.       : x( 0 ),
  10.         y( 0 )
  11.     { }
  12.  
  13.     void cargar( )
  14.     {
  15.       cout<<endl<<"Ingrese X e Y: ";
  16.       cin>>x>>y;
  17.     }
  18.  
  19.     void mostrar( )
  20.     { std::cout << x << " " << y << std::endl; }
  21. };
  22.  
  23. class ListaNumeros
  24. {
  25.  public:
  26.    ListaNumeros( int numero )
  27.    { numeros = new Numero[ numero ]; }
  28.  
  29.    ~ListaNumeros( )
  30.    { delete[] numeros; }
  31.  
  32.    void cargar( int numero )
  33.    { numeros[ numero ].cargar( ); }
  34.  
  35.    void mostrar( int numero )
  36.    { numeros[ numero ].mostrar( ); }
  37.  
  38.  private:
  39.    Numero* numeros;
  40. }
  41.  
  42. void main()
  43. {
  44.  int col;
  45.  cout<<"Ingrese las posiciones del vector: ";
  46.  cin>>col;
  47.  ListaNumeros lista( col );
  48.  
  49.  for( int i=0;i<col;i++)
  50.  {
  51.    lista.cargar(i);
  52.  };
  53.  for(i=0;i<col;i++)
  54.  {
  55.    lista.mostrar(i);
  56.  };
  57.  system("pause");
  58. }

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