Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Dezcian en 30 Diciembre 2014, 18:30 pm



Título: [Solucionado] Declarar matriz en clase y dar dimensiones con metodo constructor
Publicado por: Dezcian en 30 Diciembre 2014, 18:30 pm
Citar
Hola! soy nuevo en este foro... ultimamente estoy desarrollando demasiado contenido en C++... Entre mis proyectos tengo una librería de simulación de fisica y algunas otras funciones para el desarrollo de videojuegos... Seguiré pidiendo ayuda sobre nuevas dudas que me surjan en el desarrollo de la misma.

Luego de tanto blabla aqui mi duda... Como puedo hacer que una matriz declarada dentro de una clase obtenga sus dimensiones el metodo constructor (o de que otra forma lo puedo hacer)... No tengo mucha idea de esto, nunca lo habia intentado... Tengo algo como esto y no funciona (como era de esperarse XD)

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class MiClase {
  6. private:
  7.      const int longitudX, longitudY;
  8.      char universo[longitudX][longitudY];
  9.  
  10. public:
  11.      MiClase(int lx, int ly) {
  12.            longitudX = lx;
  13.            longitudY = ly;
  14.      }
  15. }
  16.  
  17. int main() {
  18.    MiClase(4,5);
  19.    return 0;
  20. }
  21.  


Título: Re: Declarar matriz en una clase y dar dimensiones con metodo constructor
Publicado por: crack81 en 31 Diciembre 2014, 07:59 am
Buenas te dejo mi version tiene mas de lo que querias pero es que me da la imrpresion que querias asignar valores diferentes al arreglo cada vez que creas un objeto

asi que para hacer eso se necesita arreglo dinamicos
aqui te dejo un posible ejemplo te puedes ahorra mucho codigo si haces los arreglos estaticos como seria--->  char universo[10][10];
el inconveniente es que siempre sera el mismo valor para todos los objetos y no podras cambiarlo

Código
  1. //---------------------------------------------------------------------------
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class MiClase {
  7. public://para fines demostrativos lo pondren en publico pero no es correcto dejar los atributos
  8. //o variables como publicos siempre tiene que ser privadas
  9.  
  10.       int longitudX, longitudY;//las variables no pueden ser constantes
  11.       char **universo; //Arreglo de dos dimensiones dinamicos, por eso usa doble puntero
  12.  
  13. public:
  14.      MiClase(int lx, int ly);//Definimios nuestros constructor
  15.     ~MiClase(); //Destructor del objeto
  16. };
  17.  
  18.  
  19. MiClase::MiClase(int lx, int ly) { //implementamos el constructor
  20.  
  21.   longitudX=lx; //asignamos los valores
  22.   longitudY=ly;
  23.  
  24.  
  25.   universo=new char*[longitudX]; //crear la primera dimension
  26.   for(int i=0;i<longitudX;i++){
  27.      universo[i]=new char[longitudY];//creamos las dimensiones de adentro
  28.   }
  29. }
  30.  
  31. MiClase::~MiClase(){//Destructor de objeto , este se llama automaticametne y libera la memoria del arreglo bidimensional
  32.  
  33.   for(int i=0;i<longitudX;i++){
  34.      delete[] universo[i];//eliminar la primera dimesion del arreglo
  35.   }
  36.  
  37.   delete[] universo; //elimina la segunda dimension
  38. }
  39.  
  40. //------------------------------------------------------------------------------------------------------------------------------
  41.  
  42. int main() {
  43.  
  44.   MiClase objeto(4,5);//cramos el objeto
  45.  
  46.   for(int i=0;i<objeto.longitudX;i++){ //lo recorremos solo para ver que funciona
  47.     for(int j=0;j<objeto.longitudY;j++){
  48.        objeto.universo[i][j]='x';//le asignamos un caracteer
  49.        cout<<objeto.universo[i][j]<<" ";
  50.  
  51.     }
  52.     cout<<endl;
  53.   }
  54.  
  55.   cin.get();
  56.   return 0;
  57. }

Espero te ayude si tienes dudas avisa saludos...


Título: Re: Declarar matriz en una clase y dar dimensiones con metodo constructor
Publicado por: Dezcian en 31 Diciembre 2014, 16:29 pm
Hola crack81! muchas gracias por tu ayuda, me ha servido mucho... Había intentado algo así pero me faltaba esta parte:

Código
  1. universo=new char*[longitudX]; //crear la primera dimension
  2.   for(int i=0;i<longitudX;i++){
  3.      universo[i]=new char[longitudY]; //<---- Esto me faltaba xD
  4.   }

muchas gracias, doy el tema por solucionado :D