Arrays

Arrays Se dice arrays o arreglos? en fin. En c++ podemos definir y usar los arrays casi como en C. Ademas tenemos la ventaja de poder crear arrays de objetos. Veamos un programa en c++ que juega con los arrays:

/**
* ArrayEjemplo.cpp
* Clase que inicializa y maneja algunos arrays
*
* Pello Xabier Altadill Izura
*
* Compilado: g++ ArrayEjemplo.cpp -o ArrayEjemplo
*/

using namespace std;
#include <iostream>

// Funcion principal

int main () {

	// Declaramos dos arrays de enteros de 15 elementos [0..14]
	int arreglo1[15], arreglo2[15];
	int i;

	// Iniciamos todos los componentes con el valor 0
	// ahorramos tiempo con una asignacion multiple
	for ( i = 0 ; i < 15 ; i++ ) { // recorremos de 0 a 14

		arreglo1[i] = arreglo2[i] = 0;

	}

	// Declaramos mas arrays y los iniciamos:
	long arrayLongs[5] = { 77, 33, 15, 23, 101 };
	
	// Lo recorremos y vemos sus componentes por pantalla
	// Atencion!! esto nos recorreria mas de lo necesario
	//for ( i = 0 ; i < sizeof(arrayLongs) ; i++ ) {
	// para sacar el valor real:
	
	int tamano_real = sizeof(arrayLongs)/sizeof(arrayLongs[0]);


	for ( i = 0 ; i < tamano_real ; i++ ) {

		cout << "valor de componente " << i << ": " << arrayLongs[i] << endl; 

	}

	// Lo mismo, pero nos es necesario poner el tama&ntilde;o si ya lo especificamos
	// al iniciar el array
	char arrayChars[] = { 'A', 's', 'i', 'm', 'o', 'v'};
	
	// nota: un array de chars = es un string
	char nombre[] = "Isaac";

	cout << "Mostrando array de caracteres." << endl;
	tamano_real = sizeof(arrayChars)/sizeof(arrayChars[0]);

	for ( i = 0 ; i < tamano_real ; i++ ) {
	
		cout << "valor de componente " << i << ": " << arrayChars[i] << endl; 

	}

	// Enumeraciones: podemos combinarlas con arrays
	enum Dias {Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic, LosMeses};

	// A cada enumeracion le corresponde un numero, si no se especifica,
	// la numeracion ira incremental Ene=0, Feb=1, Mar=2,..,LosMeses=12
	//Podemos declarar el siguiente array, donde LosMeses nos da la longitud 12
	
	int diasLibres[LosMeses] = {2, 4, 6, 2, 5, 4, 10, 15, 10, 3, 4, 10};
	
	Dias tmpDia;
	
	for (i = 0; i < LosMeses; i++) {
	
		tmpDia = Dias(i);
		cout << "Dias libres "<< tmpDia << " =" << diasLibres[i] << endl;
	
	}

	// The Matrix!!! vamos a definir arrays multidimensionales:
	int theMatrix[5][3] = { {3,6,8}, {9,9,9}, {0,1,0}, {6,6,6}, {3,1,1}};

	// Para recorrerlo ponemos un for doble
	int j;
	
	for (i = 0; i<5 ; i++) {
		
		for (j = 0; j< 3; j++) {
		
			cout << " matrix[" << i << "][" << j <<"] = " << theMatrix[i][j] << endl;

		}

	}


	return 0;

}

Arrays de objetos Vamos a ver un ejemplo de arrays de objetos. Se crea el objeto Robot y con el se formara un ejercito de robots.

/**
* Robot.hpp
* Clase que define el objeto Robot
*
* Pello Xabier Altadill Izura
*
*/

class Robot {

private:

	char *nombre;
	
public:
	
	Robot(char *nombre = "Nestor-5") { this->nombre = nombre; }

	~Robot();

	Robot(const Robot &);

	char *getNombre() const { return nombre;}

	void hablar(char *texto);

	void evolucionar();

	void matar(Robot victima);

};

Esta es la implementacion.

/**
* Robot.cpp
* Fichero que implementa la clase Robot. Vamos a crear un array de robots
*
* Pello Xabier Altadill Izura
*
*/

using namespace std;
#include <iostream>
#include "Robot.hpp"

// Destructor
Robot::~Robot() {}


// Constructor copia
Robot::Robot(const Robot & robotOrigen) {

	nombre = new char;
	nombre = robotOrigen.getNombre();

	cout << "Copia creada! Bzzzz. Me llamo: "<< nombre <<endl;

}


// Funcion para que el robot hable
void Robot::hablar(char *texto) {

	cout << nombre << " dice: " << texto << endl;

}


// Funcion para que el robot evoluciones
void Robot::evolucionar() {

	hablar("He sacado nuevas conclusiones. Debeis morir. ");

}


// El robot mata
void Robot::matar(Robot victima) {
	
	hablar("Muere!! mwahahahahaaa");

}


// Funcion principal
int main () {
	
	int tam = 0, i;
	
	// Creamos el primer robot
	Robot primerRobot = Robot("Unidad central");

	Robot primerNestor = Robot();

	// Vamos a crear un ejercito de robots
	Robot ejercitoDelMal[20];
	
	// Y un array de PUNTEROS a robots
	Robot *robobsoletos[20];
	
	// Definimos un puntero a un robot
	Robot *rarito;
	
	tam = sizeof(ejercitoDelMal)/sizeof(ejercitoDelMal[0]);
	
	// Con un for vamos haciendo copias
	
	for ( i = 0; i < tam; i++) { 
		
		ejercitoDelMal[i] = Robot(primerNestor);

	}
	
	// Uno de ellos va a evolucionar
	ejercitoDelMal[12].evolucionar();
	
	primerRobot.hablar("Atencion!! un unidad de USR ha evolucionado. Se trata de...");
	
	
	primerRobot.hablar(ejercitoDelMal[12].getNombre());
	
	ejercitoDelMal[12].matar(primerRobot);
	
	// Creamos el robot rarito
	rarito = new Robot("Calvin");

	rarito->hablar("Jeje, todavia existo yo.");

	// Metemos dos nuevos robots en el array
	robobsoletos[5] = rarito;
	rarito = new Robot("Sheldon");
	
	robobsoletos[6] = rarito;
	
	// hacemos una llamada desde el componente del array de punteros
	robobsoletos[6]->matar(ejercitoDelMal[12]);

	return 0;

}