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 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 />
✐