Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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