[Solucionado] Declarar matriz en clase y dar dimensiones con metodo constructor

Iniciado por Dezcian, 30 Diciembre 2014, 18:30 PM

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

Dezcian

CitarHola! 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 (cpp) [Seleccionar]
#include <iostream>

using namespace std;

class MiClase {
private:
     const int longitudX, longitudY;
     char universo[longitudX][longitudY];
     
public:
     MiClase(int lx, int ly) {
           longitudX = lx;
           longitudY = ly;
     }
}

int main() {
   MiClase(4,5);
   return 0;
}

crack81

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 (cpp) [Seleccionar]
//---------------------------------------------------------------------------
#include <iostream>

using namespace std;

class MiClase {
public://para fines demostrativos lo pondren en publico pero no es correcto dejar los atributos
//o variables como publicos siempre tiene que ser privadas

      int longitudX, longitudY;//las variables no pueden ser constantes
      char **universo; //Arreglo de dos dimensiones dinamicos, por eso usa doble puntero

public:
     MiClase(int lx, int ly);//Definimios nuestros constructor
    ~MiClase(); //Destructor del objeto
};


MiClase::MiClase(int lx, int ly) { //implementamos el constructor

  longitudX=lx; //asignamos los valores
  longitudY=ly;


  universo=new char*[longitudX]; //crear la primera dimension
  for(int i=0;i<longitudX;i++){
     universo[i]=new char[longitudY];//creamos las dimensiones de adentro
  }
}

MiClase::~MiClase(){//Destructor de objeto , este se llama automaticametne y libera la memoria del arreglo bidimensional

  for(int i=0;i<longitudX;i++){
     delete[] universo[i];//eliminar la primera dimesion del arreglo
  }

  delete[] universo; //elimina la segunda dimension
}

//------------------------------------------------------------------------------------------------------------------------------

int main() {

  MiClase objeto(4,5);//cramos el objeto

  for(int i=0;i<objeto.longitudX;i++){ //lo recorremos solo para ver que funciona
    for(int j=0;j<objeto.longitudY;j++){
       objeto.universo[i][j]='x';//le asignamos un caracteer
       cout<<objeto.universo[i][j]<<" ";

    }
    cout<<endl;
  }

  cin.get();
  return 0;
}


Espero te ayude si tienes dudas avisa saludos...
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

Dezcian

Hola crack81! muchas gracias por tu ayuda, me ha servido mucho... Había intentado algo así pero me faltaba esta parte:

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


muchas gracias, doy el tema por solucionado :D