[C con Clase] Arrays en c++

Davidson, Steven srd4121 en njit.edu
Jue Oct 20 07:52:29 CEST 2016


Hola Antonio,

Sabes que la clase derivada heredan los miembros de la clase base, pero
recuerda que debes tener en cuenta los permisos para acceder a tales
miembros: privado, protegido, o público. Dicho esto, un ejemplo sencillo
sería,

class cNivel
{
protected:
  int mapa[100][100];

public:
  cNivel() {}
};

class cNivel01 : public cNivel
{
public:
  cNivel01() : cNivel() {}
};

Ahora 'cNivel01' tiene permiso para acceder a 'mapa' directamente.

Podríamos extender la lógica para poder inicializar el array usando la
lista inicializadora del constructor de la clase base. Por ejemplo,

class cNivel
{
protected:
  int mapa[100][100];

public:
  cNivel() : mapa{ {1, 2, 3, 4}, {-1,-2,-3,-4} } {}
};

class cNivel01 : public cNivel
{
public:
  cNivel01() : cNivel() {}
};

No nos podemos referir directamente a 'mapa' en la lista inicializadora del
constructor de la clase derivada, 'cNivel01', porque aún no existe. De
hecho, el objeto 'cNivel' aún no se ha construido completamente hasta que
no nos adentremos en el cuerpo de la función del constructor, 'cNivel01()'.

Si quieres algo más sencillo, puedes usar las plantillas estándares, como
'std::array<>'. Por ejemplo,

class cNivel
{
protected:
  std::array<std::array<int,100>, 100> mapa;

public:
  cNivel() : mapa{ std::array<int, 100>{1, 2, 3, 4}, std::array<int,
100>{-1,-2,-3,-4} } {}
  cNivel(const std::array<std::array<int, 100>, 100> &m) : mapa(m) {}
};

class cNivel01 : public cNivel
{
public:
  cNivel01() : cNivel( { std::array<int, 100>{4,5,6,7}, std::array<int,
100>{1,2,3,4} } ) {}
};


Espero que esto te oriente.

Steven


2016-10-19 20:20 GMT-04:00 Antonio Escalante <gravitonio en gmail.com>:

> Hola grupo,
>
> Tengo una duda sobre arrays en c++ me gustaria plantearos.
>
> Siguiendo el curso de programacion de videojuegos de Nacho Cabanes (
> http://nachocabanes.com/videojuegos/manicminer/miner11.php) tenemos una
> clase cNivel con toda la funcionalidad basica para todos los niveles. Se
> crean las clases ( cNivel01, cNivel02 etc ) para cada nivel que heredan
> todas de cNivel.
>
> cNivel tiene 2 arrays bidimensionales, uno que seria el backup del mapa
> para restaurarlo si nos matan durante el juego y otro que es una copia y se
> modifica durante el juego. Ambos tal que int mapa[ancho][alto]; ( o incluso
> plantear un solo array que no se modifica durante el juego )
>
> La idea es que la clase de cada nivel ( cNivel01, cNivel02 ...) puedan
> redefinir ese array backup segun su mapa pero no consigo hacerlo por
> problemas de redefinicion de variable
>
> Alguien podria explicarme como y donde se declara e inicializa un array en
> una clase base y como se sobreescribe en la clase derivada? Se puede
> iniciar el array al completo
>  ( valores entre llaves { , , , } ) o habria que hacerlo elemento a
> elemento ( [0][0] = 5 [0][1] = 5 ... )
>
> Muchisimas gracias a todos.
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20161020/3d86a4a1/attachment.html>


Más información sobre la lista de distribución Cconclase