13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 515 — #553<br />

✐<br />

16.8. Por qué usar iteradores<br />

Para ambas instancias de PStash, se crea un iterador y se usa para moverse a<br />

través del cont<strong>en</strong>edor. Note la elegancia g<strong>en</strong>erada por el uso de estos constructores;<br />

no hay que preocuparse por los detalles de implem<strong>en</strong>tación de usar un array. Se<br />

le dice al cont<strong>en</strong>edor y al iterador qué hacer y no cómo hacerlo. Esto produce una<br />

solución más s<strong>en</strong>cilla de conceptualizar, construir y modificar.<br />

16.8. Por qué usar iteradores<br />

Hasta ahora se han visto los mecanismos de los iteradores, pero <strong>en</strong>t<strong>en</strong>der el por<br />

qué son tan importantes necesita un ejemplo más complejo.<br />

Es normal ver el polimorfismo, la creación dinámica de objetos, y los cont<strong>en</strong>edores<br />

<strong>en</strong> un programa ori<strong>en</strong>tado a objetos real. Los cont<strong>en</strong>dores y la creación dinámica<br />

de objetos resuelv<strong>en</strong> el problema de no saber cuantos o que tipo de objetos se necesitarán.<br />

Y si el cont<strong>en</strong>edor está configurado para manejar punteros a la clase base,<br />

cada vez que se ponga un puntero a una clase derivada hay un upcast (con los b<strong>en</strong>eficios<br />

que conlleva de claridad de código y ext<strong>en</strong>sibilidad). Como código del final<br />

del Volum<strong>en</strong> 1, este ejemplo reune varios aspectos de todo lo que se ha apr<strong>en</strong>dido -<br />

si es capaz de seguir este ejemplo, <strong>en</strong>tonces está preparado para el Volum<strong>en</strong> 2.<br />

Suponga que esta creando un programa que permite al usuario editar y producir<br />

difer<strong>en</strong>tes clases de dibujos. Cada dibujo es un objeto que conti<strong>en</strong>e una colección de<br />

objetos Shape:<br />

//: C16:Shape.h<br />

#ifndef SHAPE_H<br />

#define SHAPE_H<br />

#include <br />

#include <br />

class Shape {<br />

public:<br />

virtual void draw() = 0;<br />

virtual void erase() = 0;<br />

virtual ~Shape() {}<br />

};<br />

class Circle : public Shape {<br />

public:<br />

Circle() {}<br />

~Circle() { std::cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!