Sei sulla pagina 1di 61

Tema 4 Genericidad

Programacin Orientada a Objetos Curso 2010/2011

Contenido
Genericidad en Java. Colecciones en Java. Genericidad en C++. Colecciones en C++.

Curso 2010/2011

Programacin Orientada a Objetos

Genericidad en Java
Facilidad de un lenguaje de programacin para definir clases parametrizadas con tipos de datos. Resultan de utilidad para la implementacin de tipos de datos contenedores como las colecciones. La genericidad slo tiene sentido en lenguajes con comprobacin esttica de tipos, como Java. La genericidad permite escribir cdigo reutilizable.
Curso 2010/2011 Programacin Orientada a Objetos 3

Clase Contenedor
public class Contenedor<T> { private T contenido; public void setContenido(T contenido) { this.contenido = contenido; } public T getContenido() { return contenido; } }
Curso 2010/2011 Programacin Orientada a Objetos 4

Genericidad
La parametrizacin de una clase genrica se realiza en la declaracin de una variable y en la construccin.

Contenedor<String> contenedor = new Contenedor<String>(); contenedor.setContenido("hola");

Curso 2010/2011

Programacin Orientada a Objetos

Operaciones sobre tipos genricos


Podemos aplicar la asignacin (=) y la comparacin de identidad (== o !=). Tambin las operaciones aplicables sobre cualquier objeto (mtodos de la clase Object) Dentro de la clase genrica, no es posible construir objetos de un tipo genrico:
T contenido = new T(); // No compila

Es posible aplicar ms operaciones aplicando genericidad restringida.


Curso 2010/2011 Programacin Orientada a Objetos 6

Genericidad
Una clase genrica es una clase normal, salvo que dentro de su declaracin utiliza un tipo variable (parmetro), que ser definido cuando sea utilizada. Dentro de una clase genrica se pueden utilizar otras clases genricas. Una clase genrica puede tener varios parmetros.
public class ContenedorDoble <T,K> { private String nombre; private Contenedor<T> clave; private K valor; } ContenedorDoble<String, Cuenta> contenedor =
Curso 2010/2011 Programacin Orientada a Objetos 7

Genericidad y tipos primitivos


Las clases genricas no pueden ser parametrizadas a tipos primitivos. Para resolver este problema el lenguaje define clases envoltorio de los tipos primitivos:
Integer, Float, Double, Character, Boolean, etc.

El compilador transforma automticamente tipos primitivos en clases envoltorio y viceversa: autoboxing.


Contenedor<Integer> contenedor = new Contenedor<Integer>(); contenedor.setContenido(10); int valor = contenedor.getContenido();
Curso 2010/2011 Programacin Orientada a Objetos 8

Genericidad restringida
Objetivo: limitar los tipos a los que puede ser parametrizada una clase genrica. Al restringir los tipos obtenemos el beneficio de poder aplicar mtodos sobre los objetos de tipo genrico. Una clase con genericidad restringida slo permite ser parametrizada con tipos compatibles con el de la restriccin (clase o interfaz).

Curso 2010/2011

Programacin Orientada a Objetos

Genericidad restringida
La clase CarteraAhorro slo puede ser parametrizada con tipos compatibles con Deposito. Podemos aplicar mtodos disponibles en la clase Deposito.
public class CarteraAhorro<T extends Deposito> { private LinkedList<T> contenido; public void liquidar() { for (T deposito : contenido) deposito.liquidar(); } }
Curso 2010/2011 Programacin Orientada a Objetos 10

Genericidad restringida
Una clase genrica puede estar restringida por varios tipos:

public class Contenedor<T extends Deposito & Amortizable>

Por tanto, las operaciones disponibles para objetos de tipo T son las de todos los tipos.

Curso 2010/2011

Programacin Orientada a Objetos

11

Genericidad y herencia
Una clase puede heredar de una clase genrica. La nueva clase tiene las opciones:
Mantener la genericidad de la clase padre.
public class CajaSeguridad<T> extends Contenedor<T>

Restringir la genericidad.
public class CajaSeguridad<T extends Valorable> extends Contenedor<T>

No ser genrica y especificar un tipo concreto.


public class CajaSeguridad extends Contenedor<Valorable>

Curso 2010/2011

Programacin Orientada a Objetos

12

Genericidad y sistema de tipos


Contenedor<Deposito> Deposito

No hay relacin
DepositoEstructurado Contenedor<DepositoEstructurado>

Contenedor<Deposito> cDeposito; Contenedor<DepositoEstructurado> cEstructurado; cDeposito = cEstructurado; // No compila

Curso 2010/2011

Programacin Orientada a Objetos

13

Genericidad y sistema de tipos


Cuando se declara una variable cuyo tipo se corresponde con una clase genrica y no se especifica el parmetro se asigna el tipo puro (raw) que corresponde a:
Sin genericidad restringida, la clase Object. Con genericidad restringida, la clase a la que se restringe.

Contenedor contenedor = new Contenedor(); // Object CarteraAhorro cartera = new CarteraAhorro(); // Deposito

Siendo:
Clase Contenedor<T> Clase CarteraAhorro<T extends Deposito>
Curso 2010/2011 Programacin Orientada a Objetos 14

Genericidad y tipos comodn


El mtodo slo permite objetos de tipo List<Deposito>.
public double posicionGlobal(List<Deposito> depositos) { double posicion = 0; for (Deposito deposito : depositos) { posicion += deposito.getCapital(); } return posicion; }

Cmo podemos pasar un lista de depsitos estructurados?


Curso 2010/2011 Programacin Orientada a Objetos 15

Genericidad y tipos comodn


public double posicionGlobal( List<? extends Deposito> depositos)

Se utiliza un comodn, que significa: permite cualquier lista genrica parametrizada a la clase Depsito o a un tipo compatible (subclase). Si pasamos como parmetro un objeto List<DepositoEstructurado>, ste ser el tipo reconocido dentro del mtodo. El tipo comodn se puede usar para declarar variables locales o atributos. No se puede utilizar el tipo comodn para construir objetos.

Curso 2010/2011

Programacin Orientada a Objetos

16

Genericidad y mquina virtual


La mquina virtual no maneja objetos de tipo genrico. En tiempo de ejecucin se pierde la informacin sobre el tipo utilizado para parametrizar la clase genrica.
Todo tipo genrico (clase genrica parametrizada) se transforma a un tipo puro.

Con el operador instanceof slo podemos preguntar por el nombre de la clase.


// No compila if (contenedor instanceof Contenedor<Deposito>) { } // S compila if (contenedor instanceof Contenedor) { }
Curso 2010/2011 Programacin Orientada a Objetos 17

Genericidad basada en Object


La genericidad fue introducida en Java a partir de la versin 5. Antes de esa versin, las clases genricas se definan utilizando el tipo Object en lugar de un tipo genrico. Una referencia de tipo Object puede referenciar a cualquier objeto. Este modelo est en desuso, aunque an existe cdigo que trabaja con la genericidad basada en Object.
Curso 2010/2011 Programacin Orientada a Objetos 18

Genericidad basada en Object


public class Contenedor { private Object contenido; public void setContenido(Object contenido) { this.contenido = contenido; } public Object getContenido() { return contenido; } }
Curso 2010/2011 Programacin Orientada a Objetos 19

Genericidad basada en Object


El compilador no ayuda en el control de tipos. El uso correcto de los tipos queda en manos del programador.
Para extraer objetos es necesario hacer siempre un casting que podra fallar.
Contenedor contenedor = new Contenedor (); contenedor.setContenido("hola"); Deposito d = (Deposito)contenedor.getContenido(); // Error de casting en tiempo de ejecucin.

Curso 2010/2011

Programacin Orientada a Objetos

20

Seminario 3
En el Seminario 3 se incluye un apartado que trata la genericidad. Se incluyen los siguientes ejemplos:
Genericidad basada en Object. Definicin de una clase genrica. Genericidad restringida.

Curso 2010/2011

Programacin Orientada a Objetos

21

Colecciones en Java
Las colecciones en Java son un ejemplo destacado de implementacin de cdigo reutilizable utilizando un lenguaje orientado a objetos. Todas las colecciones son genricas. Los tipos abstractos de datos se definen como interfaces. Se implementan clases abstractas que permiten factorizar el comportamiento comn a varias implementaciones. Un mismo TAD puede ser implementado por varias clases List: LinkedList, ArrayList

Curso 2010/2011

Programacin Orientada a Objetos

22

Colecciones en Java. Paquete java.util


Iterator
devuelve

Collection

devuelve

Map

devuelve

ListIterator

List

Set

SortedMap

AbstractMap

AbstractCollection AbstractList

SortedSet

TreeMap

HashMap

AbstractSet HashSet TreeSet

ArrayList

AbstractSequentialList LinkedList

extends implements interface class

Curso 2010/2011

Programacin Orientada a Objetos

23

Interfaz Collection<T>
Define las operaciones comunes a todas las colecciones de Java. Permite manipular colecciones basndonos en su interfaz en lugar de en la implementacin. Los tipos bsicos de colecciones son:
Listas, definidas en la interfaz List<T> Conjuntos, definidos en la interfaz Set<T>

Curso 2010/2011

Programacin Orientada a Objetos

24

Interfaz Collection<T>
Operaciones bsicas:
size(): devuelve el nmero de elementos. isEmpty(): indica si tiene elementos. add(T e): aade un elemento a la coleccin. Retorna un booleano indicando si acepta la insercin. remove(Object e): intenta eliminar el elemento. Retorna un booleano indicando si ha sido eliminado. clear(): elimina todos los elementos. contains(Object e): indica si contiene el objeto

pasado como parmetro.


Curso 2010/2011 Programacin Orientada a Objetos

25

Interfaz List<T>
La interfaz List<T> define secuencias de elementos a los que se puede acceder atendiendo a su posicin. Las posiciones van de 0 a size()-1.
El acceso a una posicin ilegal produce la excepcin IndexOutOfBoundsException

El mtodo add(T e) aade al final de la lista. Aade a las operaciones de Collection mtodos de acceso por posicin como:
T get (int index) T set (int index, T element) void add (int index, T element) T remove (int index)
Curso 2010/2011 Programacin Orientada a Objetos 26

Implementaciones de Listas
ArrayList<T> Implementacin basada en arrays redimiensionables. Operaciones de insercin y modificacin ineficientes. Operaciones de creacin y consulta rpidas. LinkedList<T> Implementacin basada en listas doblemente enlazadas Inserciones y modificaciones rpidas, especialmente en el principio y el final:
addFirst, addLast, removeFirst, removeLast

Acceso aleatorio a elementos ineficiente Acceso eficiente al principio y al final de la lista:


getFirst y getLast
Curso 2010/2011 Programacin Orientada a Objetos 27

Ejemplo uso de listas


import java.util.List; import java.util.LinkedList; public class Persona { private final String dni; private String nombre; private LinkedList<ProductoFinanciero> productosContratados; public Persona(String dni, String nombre){ this.dni = dni; this.nombre = nombre; productosContratados = new LinkedList<ProductoFinanciero>(); }

Curso 2010/2011

Programacin Orientada a Objetos

28

Ejemplo uso de listas


public void addProducto(ProductoFinanciero producto){ productosContratados.add(producto); } public void removeProducto(ProductoFinanciero producto){ productosContratados.remove(producto); } public List<ProductoFinanciero> getProductosContratados(){ return new LinkedList<ProductoFinanciero>( productosContratados); } }

Se debe utilizar el tipo de la interfaz como valor de retorno. Todas las colecciones disponen del constructor de copia.
Curso 2010/2011 Programacin Orientada a Objetos 29

Conjuntos: Set<T> y SortedSet<T>


La interfaz Set<T> define conjuntos de elementos no repetidos. Para evitar la insercin de elementos repetidos, la igualdad de los objetos se comprueba con equals. La interfaz SortedSet<T> extiende Set<T> con la funcionalidad para conjuntos de elementos ordenados
Los mtodos first y last devuelven el primer y el ltimo elemento de acuerdo a la relacin de orden. Tambin proporciona mtodos para obtener subconjuntos:
SortedSet<T> headSet (T toElement) SortedSet<T> tailSet (T fromElement) SortedSet<T> subSet (T fromElement ,T toElement)

Curso 2010/2011

Programacin Orientada a Objetos

30

Implementaciones de conjuntos
Implementaciones de conjuntos:
HashSet<T> guarda los elementos del conjunto en una tabla hash. TreeSet<T> implementacin de conjuntos ordenados basada en rboles binarios balanceados.
Implementa la interfaz SortedSet<T>

Las operaciones de bsqueda y modificacin son ms lentas en TreeSet que en HashSet


Curso 2010/2011 Programacin Orientada a Objetos 31

Mapas: Map<K,V> y SortedMap<K,V>


La interfaz Map<K,V> define el tipo de datos que representa pares <clave, valor>
Un mapa no puede tener claves duplicadas. Cada clave slo puede tener un valor asociado.

La interfaz SortedMap<K,V> extiende la interfaz Map<K,V> para proporcionar la funcionalidad de mapas ordenados por claves.
Las operaciones son anlogas a las de la interfaz SortedSet considerando el conjunto de claves. firstKey y lastKey: primera y ltima clave SortedMap<K,V> headSet (T toKey) SortedMap<K,V> tailSet (T fromKey) SortedMap<K,V> subSet (T fromKey ,T toKey)

Curso 2010/2011

Programacin Orientada a Objetos

32

Mapas: Map<K,V> y SortedMap<K,V>


Un mapa no es una coleccin, sin embargo contiene distintas colecciones:
Conjunto de claves (Set<K>) Coleccin de valores (Collection<V>) Conjunto de pares <clave, valor> (Set<Map.Entry<K,V>>)

Las implementaciones disponibles son:


HashMap<T>: implementacin basada en una tabla hash TreeMap<T>: implementacin basada en rboles balanceados.
Las claves estn ordenadas (SortedSet<K>).

Curso 2010/2011

Programacin Orientada a Objetos

33

Interfaz Map<K,V>
Mtodos bsicos:
V put(K clave, V valor): inserta una asociacin en el

mapa.
Retorna el valor de la antigua asociacin, si la hubiera. V get(clave): retorna el valor asociado a una clave. Si la asociacin no existe, devuelve nulo. Set<K> keySet(): devuelve el conjunto de claves. Collection<V> values(): devuelve la coleccin de valores. boolean containsKey(key): indica si existe una clave. Set<Map.Entry<K, V>> entrySet(): devuelve el conjunto

de todas las asociaciones, Map.Entry<K, V>:


getKey(): consultar la clave. getValue(): consultar el valor.

Curso 2010/2011

Programacin Orientada a Objetos

34

Ejemplo clase Sucursal


public class Sucursal { private int codigo; private String direccion; private HashMap<Persona, LinkedList<ProductoFinanciero>> pasivo; public Sucursal(int codigo, String direccion){ this.codigo = codigo; this.direccion = direccion; pasivo = new HashMap<Persona, LinkedList<ProductoFinanciero>>(); } public void addContrato(Persona cliente, ProductoFinanciero producto) { public Set<Persona> getClientes(){ public Set<ProductoFinanciero> getProductosContratados(){ }
Curso 2010/2011 Programacin Orientada a Objetos 35

Ejemplo clase Sucursal


public void addContrato(Persona cliente, ProductoFinanciero producto) { LinkedList<ProductoFinanciero> productos; if (! pasivo.containsKey(cliente)) { productos = new LinkedList<ProductoFinanciero>(); pasivo.put(cliente, productos); } else productos = pasivo.get(cliente); productos.add(producto); }

Curso 2010/2011

Programacin Orientada a Objetos

36

Ejemplo clase Sucursal


public Set<Persona> getClientes(){ return new HashSet<Persona>(pasivo.keySet()); } public Set<ProductoFinanciero> getProductosContratados(){ Collection<LinkedList<ProductoFinanciero>> productos; productos = pasivo.values(); Set<ProductoFinanciero> cjtoProductos = new HashSet<ProductoFinanciero>(); for (LinkedList<ProductoFinanciero> lista : productos) cjtoProductos.addAll(lista); return cjtoProductos; }

Curso 2010/2011

Programacin Orientada a Objetos

37

Orden de los objetos


El orden utilizado por las colecciones ordenadas (SortedSet, SortedMap) puede ser el orden natural de los objetos (por defecto) o el criterio de ordenacin que se establece en el constructor. La interfaz Comparable impone el orden natural de los objetos de las clases que la implementan.
public interface Comparable<T> { public int compareTo(T o); }

El mtodo compareTo devuelve un entero positivo si la relacin es mayor que, negativo si es menor que y cero si son iguales.
Curso 2010/2011 Programacin Orientada a Objetos 38

Orden natural de Cuenta


public class Cuenta implements Comparable<Cuenta>{ public int compareTo(Cuenta otraCta) { if (this.codigo > otraCta.codigo) return 1; else if (this.codigo < otraCta.codigo) return -1; else return 0; } }

Curso 2010/2011

Programacin Orientada a Objetos

39

TreeSet<Cuenta> orden natural


public class Persona { private TreeSet<Cuenta> misCuentas; public Persona(String dni, String nombre){ //TreeSet utiliza el orden natural de la clase Cuenta misCuentas = new TreeSet<Cuenta>(); } /** * Aade una cuenta a la coleccin de la persona que es titular * @param cta Cuenta a aadir en la coleccin * @return true si la cuenta se ha aadido y false en caso contrario */ public boolean addCuenta(Cuenta cta){ return misCuentas.add(cta); } }

Curso 2010/2011

Programacin Orientada a Objetos

40

Criterios de ordenacin
Para definir un criterio de ordenacin hay que implementar la interfaz Comparator.
public interface Comparator<T> { public int compare(T o1, T o2); }

El mtodo compare devuelve un entero positivo si la relacin es mayor que, negativo si es menor que y cero si son iguales.

Curso 2010/2011

Programacin Orientada a Objetos

41

Criterios de ordenacin para Cuenta


public class OrdenSaldo implements Comparator<Cuenta>{ public int compare(Cuenta o1, Cuenta o2) { if (o1.getSaldo() > o2.getSaldo()) return 1; else if (o1.getSaldo() < o2.getSaldo()) return -1; else return 0; } } public class OrdenTitular implements Comparator<Cuenta>{ public int compare(Cuenta o1, Cuenta o2) { return (o1.getTitular().getNombre(). compareTo(o1.getTitular().getNombre())); } }
Curso 2010/2011 Programacin Orientada a Objetos 42

TreeSet<Cuenta> con criterio de ordenacin


public class Persona { private TreeSet<Cuenta> misCuentas;

public Persona(String dni, String nombre){ misCuentas = new TreeSet<Cuenta>(new OrdenTitular()); //TreeSet utiliza el orden establecido //en la clase OrdenTitular para ordenar las cuentas } }

Curso 2010/2011

Programacin Orientada a Objetos

43

Iteradores
Las colecciones de Java son iterables, es decir, podemos recorrer todos sus elementos. Se utilizan iteradores para que el cdigo que realiza el recorrido no conozca las particularidades de la estructura de datos: lista enlazada, lista basada en arrays, etc.

public double posicionGlobal(List<Deposito> depositos) { double posicion = 0; for (Deposito deposito : depositos) { posicion += deposito.getCapital(); } return posicion; }
Curso 2010/2011 Programacin Orientada a Objetos 44

Iteradores
Java proporciona la interfaz Iterable<T> que debe ser implementada por aquellas clases sobre las que se pueda iterar:
public interface Iterable<T> { Iterator<T> iterator(); }

A los objetos iterables se les exige que creen objetos iterador (Iterator) para realizar la iteracin. Los arrays y la interfaz Collection son iterables.
Curso 2010/2011 Programacin Orientada a Objetos 45

Iteradores
Interfaz Iterator<T>:
hasNext(): indica si quedan elementos en la iteracin. next(): devuelve el siguiente elemento de la iteracin. remove(): elimina el ltimo elemento devuelto por el iterador.
public interface Iterator<T> { boolean hasNext(); T next(); void remove(); }
Curso 2010/2011 Programacin Orientada a Objetos 46

Recorrido for each


El recorrido for each permite recorrer objetos iterables sin manejar un objeto iterador. Es la opcin ms comn de recorrido.

public double posicionGlobal(List<Deposito> depositos) { double posicion = 0; for (Deposito deposito : depositos) { posicion += deposito.getCapital(); } return posicion; }

Curso 2010/2011

Programacin Orientada a Objetos

47

Recorrido explcito con iterador


Interesa manejar un iterador cuando queremos eliminar algn elemento de la coleccin.
En Java slo se puede modificar una coleccin que se est recorriendo utilizando el iterador.

public double filtrar(List<Deposito> depositos) { Iterator<Deposito> it = depositos.iterator(); while (it.hasNext()) { Deposito deposito = iterator.next(); if (deposito.getCapital() < 1000) it.remove(); } }
Curso 2010/2011 Programacin Orientada a Objetos

48

Genericidad en C++
La clases genricas en C++ se conocen como templates. Ejemplo: Contenedor

template <class T> class Contenedor{ private: T contenido; public: T getContenido(); void setContenido (T elem); };

Curso 2010/2011

Programacin Orientada a Objetos

49

Genericidad Implementacin
La implementacin de la clase genrica debe realizarse en el fichero de cabecera:

template<class T> T Contenedor<T>::getContenido(){ return contenido; }

template<class T> void Contenedor<T>::setContenido(T elem){ contenido = elem; }

Curso 2010/2011

Programacin Orientada a Objetos

50

Genericidad Uso
Se indica el tipo de la clase genrica en su declaracin. Puede ser aplicada a tipos primitivos.
Persona* titular = new Persona("juan", "34914680"); Cuenta* cuenta = new Cuenta(titular); Contenedor<Cuenta*> contenedor; contenedor.setContenido(cuenta); Cuenta* cta = contenedor.getContenido(); Contenedor<int> cEntero; cEntero.setContenido(10);

Curso 2010/2011

Programacin Orientada a Objetos

51

Genericidad Crticas
C++ no implementa un autntico sistema de genericidad. Cuando se usa una clase genrica, se realiza un reemplazo del texto del parmetro en la declaracin de la clase. Por tanto, se genera cdigo para cada uno de los tipos a los que se instancie la clase genrica.

Curso 2010/2011

Programacin Orientada a Objetos

52

Genericidad restringida
No se puede restringir la genericidad. Est permitido aplicar cualquier mtodo y operador sobre las entidades del tipo genrico (tipo T en el ejemplo). Es problemtico determinar la sintaxis de los mensajes, ya que se puede instanciar a tipos por valor o referencia. Si la operacin no est disponible sobre el tipo genrico, el error ser detectado en tiempo de compilacin.

Curso 2010/2011

Programacin Orientada a Objetos

53

Colecciones en C++
Todas las entidades de la Librera Estndar C++ se han incluido en un nico espacio de nombres denominado std. La librera estndar de plantillas, o STL (Standard Template Library), implementa un conjunto de estructuras de datos y algoritmos que conforman una parte sustancial de la Librera Estndar C++. Las estructuras de datos genricas se denominan contenedores. Los contenedores son clases genricas (template) pensadas para contener cualquier tipo de objeto. No existe un contenedor comn raz de la jerarqua.
Curso 2010/2011 Programacin Orientada a Objetos 54

Tipos de colecciones
Existen dos tipos de contenedores:
Secuencias:
Almacenan los elementos en orden secuencial. Adecuadas para accesos directos y secuenciales. vector, list, deque (cola de doble terminacin), stack

Asociaciones:
Almacenan pares de valores <clave, valor>. Podra verse como una array en el que el ndice no tiene por qu ser un entero. Adecuados para accesos aleatorios mediante claves. map, set
Curso 2010/2011 Programacin Orientada a Objetos 55

Cuenta.h
#include <list> using namespace std;

class Cuenta { public: list<double>* getOperaciones() const; private: list<double>* operaciones; void anotarOperacion(double cantidad); };

Curso 2010/2011

Programacin Orientada a Objetos

56

Cuenta.cpp
Cuenta::Cuenta (Persona* persona, double saldoInicial){ operaciones = new list<double>(); }

list<double>* Cuenta::getOperaciones() const{ return new list<double>(*operaciones); }

void Cuenta::anotarOperacion(double cantidad){ operaciones->push_back(cantidad); }

Curso 2010/2011

Programacin Orientada a Objetos

57

Prueba de listas
int main () { Cuenta* cuenta = new Cuenta(titular); cuenta->ingreso(100); cuenta->reintegro(300); cuenta->ingreso(1000); list<double>* movimientos; movimientos = cuenta->getOperaciones(); list<double>::const_iterator it; it = movimientos->begin(); for (; it != movimientos->end() ;++it) cout << (*it) << endl; exit(0); }
Curso 2010/2011 Programacin Orientada a Objetos 58

Prueba de listas
La implementacin de las listas no ofrece mtodos para accesos aleatorios porque seran ineficientes. Slo dispone de mtodos de acceso al principio y al final
Se puede utilizar de forma efectiva como una pila

Para recorrer las listas se utilizan iteradores.

Curso 2010/2011

Programacin Orientada a Objetos

59

Prueba con vectores


int main () { Cuenta* cuenta = new Cuenta(titular); cuenta->ingreso(100); cuenta->ingreso(300); cuenta->reintegro(300); cuenta->ingreso(1000); vector<double>* movimientos; movimientos = cuenta->getOperaciones(); for (int i = 0; i < movimientos->size(); i++) cout << (*movimientos)[i] <<endl; exit(0); }
Curso 2010/2011 Programacin Orientada a Objetos 60

Prueba con vectores


Los vectores se utilizan como arrays de tamao fijo. Aunque tiene operaciones para aumentar el tamao del vector se desaconseja su uso por ser ineficientes. Acceso fcil y eficiente a los elementos. size() no devuelve el nmero de elementos sino el tamao del vector.
Curso 2010/2011 Programacin Orientada a Objetos 61

Potrebbero piacerti anche