Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-08-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Un array de dos simensiones en C/C++ no es ni mas ni menos que un ountero a un puintero, por lo tanto:
Código:
class TEscenario {
    public:
        TEscenario();
        (...)

        char ** Tiles;
};
En las clases hijas tendrás que dar la dimensión apropiada en el constructor de cada uno o después, en una función al efecto.


Código:
Tiles = new char*[Dimension1];
for(int n=0; n<Dimension1; n++)
         Tiles [n] = new char[Dimension2];
Para destruirlo sería igual.

Código:
for(int n=0; n<Dimension1; n++)
         delete [] Tiles [n];
delete [] Tiles:
Saludos.
Responder Con Cita
  #2  
Antiguo 10-08-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Hola a ambos, muchas gracias por vuestras respuestas.
escafandra, esa idea ya la había barajado y la tenía como última opción, ya que me parece muy engorroso tener que pedir la memoria en el constructor e introducir los valores, ya que son unos valores estáticos y definidos para cada subclase.

LoPiTaL, vaya PEDAZO de idea, no se me había ocurrido, pero es exactamente lo que busco: puedo inicializarlo fácilmente y puedo pedir los valores tan simple como Escenario.Tiles(N,N).

Muchas gracias a los dos, me habéis dado una alegría >.<
Responder Con Cita
  #3  
Antiguo 10-08-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Kandorf Ver Mensaje
Hola a ambos, muchas gracias por vuestras respuestas.
escafandra, esa idea ya la había barajado y la tenía como última opción, ya que me parece muy engorroso tener que pedir la memoria en el constructor e introducir los valores, ya que son unos valores estáticos y definidos para cada subclase.

LoPiTaL, vaya PEDAZO de idea, no se me había ocurrido, pero es exactamente lo que busco: puedo inicializarlo fácilmente y puedo pedir los valores tan simple como Escenario.Tiles(N,N).

Muchas gracias a los dos, me habéis dado una alegría >.<
¿Pero que lenguaje vas a utilizar?. Entiendio que en C++. Pues bien, en C++ a secas no tienes arrays dinámicos, a no ser que te crees una clase al efecto.

Según lo que entiendo de tu último post, preendes hacer un miembro static de la clase. estos se declaran en la clase (archivo.h) y se inicializan fuera (archivo .cpp) en un lugar donde estemos seguros que se va a ejecutar.

Se trataría de hacer algo como esto:

Código:
class TEscenario {
    public:
    TEscenario();
    static BYTE **Tiles;
};

BYTE Tiles[][2] = {{1,2}, {2,3}}; // Los valores...
BYTE **TEscenario::Tiles = Tiles;
Estos miembros static solo pueden ser modificados por funciones también static de la clase, y serían comunes a todos los objetos que se creen de esa clase...

Creo que es esto lo que preguntas.

Saludos.
Responder Con Cita
  #4  
Antiguo 10-08-2010
Kandorf Kandorf is offline
Miembro
 
Registrado: may 2007
Posts: 38
Poder: 0
Kandorf Va por buen camino
Ya lo solucioné, hice esto:
Código:
class TEscenario {
    public:
        TEscenario();
        (...)

        virtual u8 Tile(u32 Y, u32 X)=0;
};

class Escenario1: public TEscenario{
    private:
        static const u8 Tiles[27][177];
    public:
        Escenario1();

        u8 Tile(u32 Y, u32 X);
};
u8 Escenario1::Tile(u32 Y, u32 X){
    return Tiles[Y][X];
}
const u8 Escenario1::Tiles[27][177]={inicializo}
Funciona perfectamente.

Sobre los archivos de cabecera, tengo un lío, se supone que en los .h declaras las variables y las funciones y en los .cpp las defines, ¿no? Lo he intentado pero me da problemas, será que no sé muy bien cómo va. ¿Tienen que llamarse igual cambiando la extensión y estar en la misma carpeta? ¿Al incluirlo con #include se especifica el .h y este ya sabe encontrar el .cpp?
Ahora mismo estoy utilizando sólo el .cpp, y es el que incluyo, funciona, pero me gusta hacer las cosas bien y me gustaría usar el .h.

Saludos.
Responder Con Cita
  #5  
Antiguo 10-08-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Para los archivos cabecera de un proyecto, lo normal es que estén en la carpeta del cpp que los incluye. En ese caso se incluyen así:
Código:
#include "archivo.h"
Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema con array JULIPO Varios 1 12-03-2009 02:10:30
Array Of bytes [Problema] Ðαяισš Varios 3 31-12-2008 09:22:23
Problema con Array MikyVato Varios 3 28-01-2007 03:00:40
problema con array de componentes nenufer Varios 2 06-06-2006 11:44:28
problema con un array de tipos aram2r OOP 5 08-06-2005 09:54:28


La franja horaria es GMT +2. Ahora son las 08:22:51.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi