informática ii

57
Informática II Clase 8: Arreglos 1 Diego Fernando Serna Restrepo Semestre 2011/2

Upload: cara-jacobs

Post on 30-Dec-2015

33 views

Category:

Documents


1 download

DESCRIPTION

Informática II. Clase 8: Arreglos. Diego Fernando Serna Restrepo. Semestre 2011/2. Chiste del Día. Contenido. Repaso. 1. Arreglos. 2. Clase String. 3. Listas Enlazadas. 4. Herencia. Herencia. Herencia. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Informática II

Informática II

Clase 8: Arreglos

1Diego Fernando Serna Restrepo Semestre 2011/2

Page 2: Informática II

Informática II 2011/22

CHISTE DEL DÍA

Page 3: Informática II

3

CONTENIDO

Informática II 2011/2

Repaso1

Arreglos2

Clase String3

4 Listas Enlazadas

Page 4: Informática II

Informática II 2011/24

HERENCIA

Diferentes tipos de objetos usualmente comparten características similares entre

sí.

La herencia permite generar nuevos tipos, tomando como base alguno ya

implementado.

También hace posible la implementación de jerarquías desde la generalización hasta la

especialización de los objetos.

Page 5: Informática II

Informática II 2011/25

HERENCIA

La programación orientada a objetos permite a las clases heredar las características y los

comportamientos de otras clases (variables miembro y los métodos).

Adicionalmente C++, permite definir una clase modificando una o más clases ya existentes.

Estas modificaciones consisten habitualmente en añadir nuevos

miembros (variables o métodos) a la clase que se está definiendo, aunque

también se puede redefinir variables o funciones miembro ya existentes.

Page 6: Informática II

Informática II 2011/26

HERENCIA

• La clase de la que se parte en este proceso recibe el nombre de clase base, y la nueva clase que se obtiene se denomina clase derivada. Ésta a su vez puede ser clase base en un nuevo proceso de derivación, iniciando de esta manera una jerarquía de clases.

Page 7: Informática II

Informática II 2011/27

EJEMPLO HERENCIAclass vehiculo{protected:

int vel;bool on;

public:vehiculo();vehiculo(int _vel,bool _on);int getVel() const;void setVel(int _vel);~vehiculo();

};

class bicicleta: private vehiculo{

private:int Ncambio;int pedalear;int Ndiscos;

public:bicicleta();void cambCambio(int _Ncambio);~bicicleta();

};

//clase vehiculovehiculo::vehiculo():vel(0),on(false){

cout<<"constructor clase base"<<endl;}

vehiculo::vehiculo(int _vel,bool _on):vel(_vel),on(_on){cout<<"constructor con argumentos clase base"<<endl;

}

int vehiculo::getVel() const {return vel;

}

void vehiculo::setVel(int _vel){vel=_vel;

}

vehiculo::~vehiculo(){}

//clase carrocarro::carro():Ncambio(0),acelerar(0){

cout<<"constructor por defecto clase derivada"<<endl;

}

void carro::cambCambio(int _cambCambio){Ncambio= _cambCambio;

}carro::~carro(){}

class carro: public vehiculo{private:

int Ncambio;int acelerar;

public:carro();void cambCambio(int _Ncambio);~carro();

};

using namespace std;

carro audi;

int main(){

//damos un valor a una variable miembro heredadaaudi.setVel(10);//accedemos a un metodo heredadocout<<audi.getVel()<<endl;

return 0;}

audi vel: 10

Page 8: Informática II

Informática II 2011/28

NOTAS:

1

•Primero se debe crear la clase base, antes de tratar de crear clases que deriven de esta.

2

•El número de variables miembro de una clase derivada es mayor o igual que el de la clase base.

3

•Hay algunos elementos de la clase base que no pueden ser heredados:•Constructore

s y destructores

•Funciones friend

•Funciones y datos estáticos de la clase

•Operador de asignación (=) sobrecargado

Page 9: Informática II

Informática II 2011/29

CONSTRUCTORES Y DESTRUCTORES• Cuando un objeto derivado es creado primero es llamado

el constructor de la clase base y luego el propio.

int vel;

bool on;

int Ncambio;

int acelerar;

Parte vehículo

Objeto carro

Page 10: Informática II

Informática II 2011/210

PASAR ARGUMENTOS AL CONSTRUCTOR BASE

• Se pueden inicializar las variables miembro heredadas, llamando al constructor de la clase base desde la etapa de inicialización del constructor de la clase derivada así:

carro(int _vel,bool _on);carro::carro(int _vel,bool _on):

Ncambio(0), acelerar(0){ }

vehiculo(_vel,_on),

Page 11: Informática II

Informática II 2011/211

EJEMPLO REDEFINICIÓN DE MÉTODOSclass vehiculo{protected:

int vel;bool on;

public:vehiculo();vehiculo(int _vel,bool _on);int getVel() const;void setVel(int _vel);~vehiculo();

};

class carro: public vehiculo{private:

int Ncambio;int acelerar;

public:carro();carro(int _vel,bool _on);int getVel() const;void cambCambio(int _Ncambio);~carro();

};

int vehiculo::getVel() const {cout<<"funcion getVel clase base"<<endl;return vel;

}

int carro::getVel() const{cout<<"funcion getVel clase derivada"<<endl;return vel;

}int main(){

carro audi(); //damos un valor a una variable miembro

heredadaaudi.setVel(10);//accedemos a un método heredado redefinidocout<<audi.getVel()<<endl;//acedemos al metodo de la clase basecout<<audi.vehiculo::getVel()<<endl;

return 0;}

Page 12: Informática II

Informática II 2011/212

SOBRECARGAR VS REDEFINIR

Cuando se sobrecarga

funciones, el nombre de la función

permanece, pero los argumentos de

entrada y de retorno pueden variar, al igual

que la implementación.

Cuando se redefine una función lo único que cambia es su

implementación. El encabezado

permanece igual (argumento de retorno

y firma) en la clase base como en la

derivada.

Page 13: Informática II

13

OCULTANDO LOS MÉTODOS DE LA CLASE BASE

Si la clase base contiene varios métodos sobrecargados, es decir métodos con nombres

iguales pero con argumentos e implementaciones diferentes, y

redefinimos uno de esos métodos dentro de una clase derivada, todos los métodos dentro de la clase base que respondan al mismo nombre

quedaran ocultos, es decir no se podrán acceder a través

del objeto derivado.

Informática II 2011/2

Page 14: Informática II

Informática II 2011/214

CONVERSIONES ENTRE CLASE BASE Y DERIVADAObjeto_claseBase= Objeto_claseDerivada;

Objeto_claseDerivada= Objeto_claseBase;

Se puede hacer referencia a un objeto de la clase derivada con su dirección contenida en un puntero a la clase base.

vehiculo *ptrV=new carro(30,true);

carro *ptrC=new vehiculo();

Page 15: Informática II

Informática II 2011/215

CONVERSIONES ENTRE CLASE BASE Y DERIVADA

using namespace std;

int main(){

vehiculo *ptrV=new carro(30,true);

cout<< ptrV->getVel()<<endl;//se accede al metodo de la clase basereturn 0;

}

Page 16: Informática II

Informática II 2011/216

EJEMPLO MÉTODOS VIRTUALES

class vehiculo{protected:

int vel;bool on;

public:vehiculo();vehiculo(int _vel,bool _on);virtual int getVel() const;void setVel(int _vel);~vehiculo();

};

class carro: public vehiculo{private:

int Ncambio;int acelerar;

public:carro();carro(int _vel,bool _on);int getVel() const;void cambCambio(int _Ncambio);~carro();

};

int vehiculo::getVel() const {cout<<"funcion getVel clase base"<<endl;return vel;

}

int carro::getVel() const{cout<<"funcion getVel clase derivada"<<endl;return vel;

}

using namespace std;

int main(){

vehiculo *ptrV=new carro(30,true);cout<<ptrV->getVel()<<endl;

//se accede al método de la clase derivadareturn 0;

}

Page 17: Informática II

17

CONTENIDO

Informática II 2011/2

Repaso1

Arreglos2

Clase String3

4 Listas Enlazadas

Page 18: Informática II

DEFINICIÓN

Definición:• Un array es una colección de

variables del mismo tipo de datos con un mismo nombre.

• Los arrays son un ejemplo de una variable estructurada en la cual:– Hay un numero de piezas

de datos contenidos en el mismo nombre.

– Hay un método ordenado para la extracción de datos individuales del array

Page 19: Informática II

EJEMPLO ARREGLOS

Solución 1:Crear una variable especifica por empleado en la cual se almacene la identificación de cada uno de los empleados.

Problema:Supongamos el señor Burns le solicita a usted un programa que le permita llevar un registro de la identificación de cada uno de los empleados de la plata nuclear de Springfield, ¿Cómo lo haría?

Page 20: Informática II

EJEMPLO ARREGLOS

Problema solución anterior:El problema se vuelve mas difícil a medida que el numero de empleados aumenta, pues implicara la creación de mas variables individuales (id5, id6, …)

Page 21: Informática II

Solución al problema anterior:En los arrays se encuentra la respuesta. Pues un array es como una caja para guardar elementos o como un archivador. Utiliza un sistema de indexación para encontrar el valor de cada una de las variables almacenadas en su interior.

EJEMPLO ARREGLOS

Page 22: Informática II

REPASO ARREGLOS

• Un array contiene N elementos.• Los elementos de un array se enumeran

consecutivamente 0, 1, 2, 3, .. (N-1)• Estos números se denominan valores índice o

subindice del array. Y sirven para accesar cualquier elemento del array.

Edad 24 17 31 16 21 17 26 26 18 23Edad

0 1 2 3 4 5 6 7 8 924 17 31 16 21 17 26 26 18 23

Número de elementos = 10

Subíndice

Page 23: Informática II

El arreglo edad tiene 10 elementos (edades), los indice van desde 0 hasta 9. Cada elemento se accede con el nombre del arreglo y con el indice al que corresponda.

• El elemento 0 del vector Edad vale 24• El elemento 5 del vector Edad vale 17

Edad0 1 2 3 4 5 6 7 8 9

24 17 31 16 21 17 26 26 18 23

Número de elementos = 10

Subíndices

Valores

Nombre

REPASO ARREGLOS

Page 24: Informática II

INICIALIZACIÓN DE ARREGLOS

INICIALIZACIÓN

En el momento de declarar el arreglo, se puede inicializar

edad0 1 2 3 4 5 6 7 8 9 Se crea el

arreglo y se inicializa

int edad[10]={16,22,19,21,21,18,19,15,32,28};

temp0 1 2 3 Se crea el

arreglo y se inicializa

float temp[4]={21.3, 23.5, 27.5, 26.4};

16 22 19 21 21 18 19 15 32 28

21.3 23.5 27.5 26.4

Page 25: Informática II

Informática II 2009/225

ARREGLOS DE OBJETOS

• Los arreglos pueden guardar secuencias de datos de cualquier tipo, incluyendo los objetos.

• Si se desea usar un método de un objeto en un arreglo se usa el operador punto (.), tal como se hace con los objetos.

Carro carrosBacanos[2]; // ¡Debe existir un constructor

// por defecto que inicialice cada uno de los objetos!

carrosBacanos[0].acelerar();

Page 26: Informática II

ARREGLOS MULTIDIMENSIONALES

• Es posible crear arrays de tantas dimensiones como requieran sus aplicaciones.•Se declaran siguiendo el patrón de la declaración de un vector:

tipo nombre [d1] [d2] [d3]… [dN];

Page 27: Informática II

ARREGLOS DE 2 DIMENSIONES

•Declaración

•Ejemplo:tipo nombre [fila] [columna];

int A[2] [3];

A

A[0][0]Nombre

Columnas = 3

Filas = 2

A[0][1] A[0][2]

A[1][0] A[1][1] A[1][2]

Page 28: Informática II

A

A[0][0] A[0][1] A[0][2]

A[1][0] A[1][1] A[1][2]

A

A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2]

ARREGLOS DE 2 DIMENSIONES

Page 29: Informática II

INICIALIZACIÓN ARREGLOS MULTIDIMENSIONALES

matrizA

A[0][0] A[0][1] A[0][2]

A[1][0] A[1][1] A[1][2]

int matrizA [2] [3] = { {3,5,7} , {8,6,4} };

Fila 0 Fila 1

3 5 7

8 6 4

int matrizA [2] [3] = { {3,5,7} , {8,6,4} };

int matrizA [2] [3] = { 3,5,7,8,6,4 };

Page 30: Informática II

B[0][0][2] B[0][1][2] B[0][2][2]

B[1][2][2]B[1][0][1] B[1][1][1]

B[0][0][1] B[0][1][1]

B[1][0][1] B[1][1][1] B[1][2][1]

B[0][2][1]

ARREGLOS DE 3 DIMENSIONES•Declaracióntipo nombre [fila] [columna] [Planos];

Int matrizB[2] [3] [3];

matrizB

B[0][0][0]Nombre

Columnas = 3

Filas =

2

B[0][1][0] B[0][2][0]

B[1][0][0] B[1][1][0] B[1][2][0]

Planos = 3

Page 31: Informática II

int matrizA [2] [3] [3]={ {{1,3,5}, {7,9,11}}, {{2,4,6}, {8,10,12}},

{{3,7,11}, {15,19,23}} };

Fila 0 Fila 1

1 3 5

7 9 11

Bloque 0

Bloque 1

Bloque 2

2 4 6

8 10 12

3 7 11

15 19 23

F0

F1

C0 C1 C2 C0 C1 C2 C0 C1 C2

Bloque 0 Bloque 1 Bloque 2

ARREGLOS DE 3 DIMENSIONES

Page 32: Informática II

USO DEL HEAP PROBLEMAS DE MEMORIA

• Cuando se declara un arreglo, se separa un espacio en memoria fijo para almacenarlo.

• El arreglo se localiza en el stack (limitado).• Heap. Tiene más memoria.• Es posible crear estructuras que se

comportan de manera dinamica

Page 33: Informática II

• Arreglos en el heap– Arreglo de apuntadores.

• Diferencia entre apuntador a un arreglo y arreglo de apuntadores

1: CAT FamilyOne[500];2: CAT * FamilyTwo[500];3: CAT * FamilyThree = new CAT[500];

(3) es una variante de (1), muy distinta de (2).

USO DEL HEAP PROBLEMAS DE MEMORIA

Page 34: Informática II

Informática II 2011/234

EJEMPLO

• Oveja rebanoUno[100]; //Arreglo de 100 ovejas en la pila

• Oveja * rebanoDos[100]; //Arreglo de 100 punteros a ovejas

• Oveja * rebanoTres = new Oveja[100];

//Puntero a arreglo de 100 ovejas en el

//heap, rebanoTres apunta al primer

//objeto tipo oveja ubicado en el heap

Page 35: Informática II

• Uso de apuntadores con nombres de arreglos– Los arreglos son apuntadores constantes.

CAT Family[50];– Es un apuntador constante a

&Family[0];– Es legal usar nombres de arreglos como

apuntadores constantes y viceverza.

Family[4];Family + 4;

USO DEL HEAP PROBLEMAS DE MEMORIA

• Arreglos en el Free Store

delete [] Family;

Page 36: Informática II

Informática II 2009/236

DECLARANDO ARREGLOS EN EL HEAP

CAT *Family = new CAT[500];• Por ejemplo, usted puede escribir:

CAT *Family = new CAT[500];

CAT *pCat = Family; //pCat apunta a Family[0]

pCat->SetAge(10); // Establecer Family[0] a 10

pCat++; // avanzar a Family[1]

pCat->SetAge(20); // Establecer Family[1] a 20

Page 37: Informática II

Informática II 2009/237

LIBERANDO MEMORIA DEL HEAP

• Para liberar toda la memoria reservada por un arreglo en el heap, será necesario usar el comando “delete [ ]” sobre el puntero que apunta a la primera dirección del arreglo.

delete [ ] punteroRebano;

/* Notese que se utiliza los operadores [ ], en caso de no utilizarlos, solo se liberará el primer elemento del arreglo, generando así fugas de memoria*/

Page 38: Informática II

Informática II 2009/238

OTORGANDO TAMAÑO DE LOS ARREGLOS EN TIEMPO DE EJECUCIÓN• Cuando se utilizan arreglos que se

encuentren ubicados en el heap, será posible asignar su tamaño en tiempo de ejecución, otorgándole gran posibilidad de intercambio a los programas.

Gato pGato = new Gato [vble];

/* ¡Importante!, recuerde liberar la memoria cuando ya no se vaya a usar */

Page 39: Informática II

39

CONTENIDO

Informática II 2011/2

Repaso1

Arreglos2

Clase String3

4 Listas Enlazadas

Page 40: Informática II

Informática II 2009/240

ARREGLOS CHAR Y STRINGS

• En C es común utilizar arreglos char cuyo último carácter es nulo (\0) , este tipo de arreglo se denominan “strings tipo C”.

• Aunque su funcionamiento es válido, hay que tener cuidado con algunas características de éstos arreglos.

Page 41: Informática II

Informática II 2009/241

ALGUNAS FUNCIONES PARA MANEJAR STRINGS

• C++ hereda múltiples funciones para manejar strings desde el lenguaje C, alguna de éstas son:

strcpy( )

strcmp( )

strlen( )

strcat( )

• Utilice a “man” para conocer su funcionamiento

Page 42: Informática II

Informática II 2009/242

CLASE STRING

• Aunque muchas de las funciones heredadas de C pueden trabajar con los strings, éstas no implementan una solución orientada a objetos.

• En las bibliotecas estándares de C++, es posible encontrar una clase para manipular este tipo de datos. Se denomina la clase “String”.

Investigue al respecto.

Page 43: Informática II

Informática II 2011/243

CLASE STRINGLa clase string está definida en la cabecera string

(#include <string>)

≠<string> <string.h>La cual no contiene la definición de la clase

string

<cstring.h>que contiene solo las

funciones para trabajar con strings terminados en NULL - por ejemplo para trabajar con char

cadena[45])

Si se incluye el módulo <iostream> no hace falta incluir <string>, porque la segunda está incluida en la primera. Incluir las dos no provoca error y mejora la legibilidad.

Page 44: Informática II

Informática II 2011/244

EJEMPLO CLASE STRING

#include <iostream>#include <string>

using namespace std;

carro audi;

int main(){

string s1; s1 = "http://";string s2 = "microe.udea.edu.co";string s3(“/~diegoserna ");string s4(1, char(32));string s5(2, &#39;\n&#39;);string s6 (s3, 2, 10); string s7 (“informatica 2");string msg = s1+s2+s3+s5+s6+s4+s7;

return 0;

}

http://microe.udea.edu.co/~diegoserna

diegoserna informatica 2

Page 45: Informática II

Informática II 2011/245

CLASE STRING

• OperadoresFunciones miembroFunciones externas

http://www.cplusplus.com/reference/string/string/

Page 46: Informática II

46

CONTENIDO

Informática II 2011/2

Repaso1

Arreglos2

Clase String3

4 Listas Enlazadas

Page 47: Informática II

Informática II 2009/247

LISTAS ENLAZADAS

• Aunque los arreglos son excelentes contenedores y pueden albergar cualquier tipo de datos, tienen el inconveniente de ser de tamaño fijo.

• Este problema puede arreglarse reasignando su tamaño dinámicamente en tiempo de ejecución; sin embargo, cuando haya que mover, liberar o reasignar memoria muchas veces, puede requerir muchos recursos del pc.

Page 48: Informática II

Informática II 2009/248

LISTAS ENLAZADAS

• Las listas enlazadas son estructuras de datos que contienen pequeños contenedores diseñados para enlazarse unos a otros.

• La idea de esta estructura, es que cada uno de los objetos conoce la ubicación del siguiente objeto en la cadena.

Page 49: Informática II

Informática II 2009/249

LISTAS ENLAZADAS

• Cada contenedor de la lista se denomina “nodo”.

• Al primer nodo de la lista se le denomina la “cabeza” de la lista, al último la “cola”.

• Existen tres tipos fundamentales de listas:– Enlazados de manera sencilla

– Doblemente enlazadas

– Arboles

Page 50: Informática II

Informática II 2009/250

LISTAS ENLAZADAS DE MANERA SENCILLA

• Cada nodo apunta al siguiente en la lista, nunca en el sentido contrario. Si se desea conocer el valor de un nodo particular, es necesario recorrer toda la lista nodo por nodo desde su inicio.

Page 51: Informática II

Informática II 2009/251

LISTAS DOBLEMENTE ENLAZADAS

• Son aquellas que permiten moverse tanto hacia el siguiente nodo como al anterior, pues en cada uno de ellos guarda dicha información.

Page 52: Informática II

Informática II 2009/252

LISTAS EN ÁRBOL

• Permiten que cada nodo apunte a dos o más nodos.

Page 53: Informática II

Informática II 2009/253

RESUMEN

1 •Una arreglo es una colección de tamaño fijo de objetos que son todos del mismo tipo.

2 •Las matrices no hacen una comprobación de límites. Un error común es escribir para compensar n de una matriz de n miembros.

3

• Los arreglos pueden ser unidimensional o multidimensional. En cualquier caso, todos los miembros del arreglo se pueden inicializar, en cualquier tipo predefinido, tales como int, o los objetos de una clase que tiene un constructor predeterminado.

Page 54: Informática II

Informática II 2009/254

RESUMEN

1• Arreglos y su contenido puede estar en el

heap o en la pila. Si elimina un arreglo en el heap, recuerde utilizar los corchetes en la llamada a eliminar.

2• Los nombres de los arreglos son

punteros constantes que apuntan a los primeros elementos del arreglo. Apuntadores y arreglos usan punteros aritméticos para encontrar el siguiente elemento de una matriz.

3• Usted puede crear listas enlazadas para

gestionar colecciones cuyo tamaño no se conoce en tiempo de compilación. De las listas enlazadas, puede crear cualquier número de más estructuras complejas de datos.

4• Las Strings son arreglos de

caracteres( char). C + + proporciona características especiales para la gestión de arreglos tipo char, incluyendo la habilidad para inicializar con cadenas entre comillas.

Page 55: Informática II

Informática II 2011/255

Page 56: Informática II

56

GRACIAS POR SU ATENCIÓN

Informática II 2011/2

Page 57: Informática II

57

BIBLIOGRAFÍA

• Aprenda C++ Avanzado como si estuviera en primero. Tecnun.

• C con clase http://c.conclase.net/curso/?cap=036#inicio

• Sams Teach yourselft C++ in 21 days http://newdata.box.sk/bx/c/htm/ch12.htm

Informática II 2011/2