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 520 — #558<br />

✐<br />

Capítulo 16. Introducción a las Plantillas<br />

12. Modifique TStack2.h para que use un vector de la STL. Asegurese de<br />

que no cambia la interfaz, para que TStack2Test.cpp funcione sin cambiarse.<br />

13. Repita el Ejercicio 12 usando una stack de la Librería Estándar de <strong>C++</strong> <strong>en</strong><br />

vez de un vector.<br />

14. Modifique TPStash2.h para que use un vector de la STL como su implem<strong>en</strong>tación<br />

interna. Asegurese que no cambia la interfaz, por lo que TPStash2Test.<br />

cpp funciona sin modificarse.<br />

15. En IterIntStack.cpp, modifique IntStackIter para darle un constructor<br />

de «marcador final», y añada el operator== y el operator!=. En el m-<br />

ain(), use un iterador para moverse a través de los elem<strong>en</strong>tos del cont<strong>en</strong>edor<br />

hasta que se <strong>en</strong>cu<strong>en</strong>tre el marcador.<br />

16. Use TStack2.h, TPSTash2.h, y Shape.h, instancie los cont<strong>en</strong>edores PStash<br />

y Stack para que cont<strong>en</strong>ga Shape*, rell<strong>en</strong>e cada uno con punteros a<br />

Shape, <strong>en</strong>tonces use iteradores para moverse a través de cada cont<strong>en</strong>edor y<br />

llame a draw() para cada objeto.<br />

17. Cree una plantilla <strong>en</strong> la clase Int para que pueda alojar cualquier tipo de objetos<br />

(Siéntase libre de cambiar el nombre de la clase a algo más apropiado).<br />

18. Cree una plantilla de la clase IntArray <strong>en</strong> IostreamOperatorOverloading.<br />

cpp del capítulo 12, introduzca <strong>en</strong> plantilla ambos tipos de objetos que están<br />

cont<strong>en</strong>idos y el tamaño del array interno<br />

19. Convierta ObjContainer <strong>en</strong> NestedSmartPointer.cpp del Capítulo 12<br />

<strong>en</strong> una plantilla. Compruebelo con dos clases difer<strong>en</strong>tes.<br />

20. Modifique C15:OStack.h y C15:OStackTest.cpp consigui<strong>en</strong>do que c-<br />

lass Stack pueda t<strong>en</strong>er múltiple her<strong>en</strong>cia automáticam<strong>en</strong>te de la clase cont<strong>en</strong>ida<br />

y de Object. La Stack cont<strong>en</strong>ida debe aceptar y producir sólo punteros<br />

del tipo cont<strong>en</strong>ido.<br />

21. Repita el ejercicio 20 usando vector <strong>en</strong> vez de Stack.<br />

22. Herede una clase StringVector de vector y redefina las funciones<br />

miembro push_back() y el operator[] para que acept<strong>en</strong> y produzcan<br />

únicam<strong>en</strong>te string* (y realiz<strong>en</strong> el moldeado adecuado). Ahora creee una<br />

plantilla que haga automáticam<strong>en</strong>te lo mismo a una clase cont<strong>en</strong>edora para<br />

punteros de cualquier tipo. Esta técnica es a m<strong>en</strong>udo usada para reducir el<br />

código producido por muchas instanciaciones de templates.<br />

23. En TPStash2.h, añada y compruebe un operator- para PStash::iterator,<br />

sigui<strong>en</strong>do la lógica de operator+.<br />

24. En Drawing.cpp, añada y compruebe una plantilla de función que llame a<br />

funciones miembro erase().<br />

25. (Avanzado) Modifique la clase Stack <strong>en</strong> TStack2.h para permitir una granularidad<br />

de la propiedad: Añada una bandera para cada <strong>en</strong>lace indicando si el<br />

<strong>en</strong>lace posee el objeto al que apunta, y de soporte a esta información la función<br />

push() y <strong>en</strong> el destructor. Añada funciones miembro para leer y cambiar la<br />

propiedad de cada <strong>en</strong>lace.<br />

520<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!