11. Arrays c++
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:
Vamos a ver un ejemplo de arrays de objetos. Se crea el objeto Robot y con el se formara un ejercito de robots.
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 */ #include <iostream.h> // 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ñ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; } } cin >> i; 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 * */ #include <iostream.h> #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]); cin >> tam; return 0; }