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 519 — #557<br />
✐<br />
16.10. Ejercicios<br />
16.10. Ejercicios<br />
Las soluciones a los ejercicios se pued<strong>en</strong> <strong>en</strong>contrar <strong>en</strong> el docum<strong>en</strong>to electrónico<br />
titulado «The Thinking in <strong>C++</strong> Annotated Solution Guide», disponible por poco<br />
dinero <strong>en</strong> www.BruceEckel.com.<br />
1. Implem<strong>en</strong>te la jerarquía de her<strong>en</strong>cia del diagrama de OShape de este capítulo.<br />
2. Modifique el resultado del Ejercicio 1 del capítulo 15 para usar la Stack y el<br />
iterator <strong>en</strong> TStack2.h <strong>en</strong> vez de un array de punteros a Shape. Añada<br />
destructores a la jerarquía de clases para que se pueda ver que los objetos Shape<br />
han sido destruidos cuando la Stack se sale del ámbito.<br />
3. Modifique TPStash.h para que el valor de increm<strong>en</strong>to usado por inflate()<br />
pueda ser cambiado durante la vida de un objeto cont<strong>en</strong>edor particular.<br />
4. Modifique TPStash.h para que el valor de increm<strong>en</strong>to usado por inflate-<br />
() automáticam<strong>en</strong>te cambie de tamaño para que reduzca el número de veces<br />
que debe ser llamado. Por ejemplo, cada vez que se llama podría doblar el valor<br />
de increm<strong>en</strong>to para su uso <strong>en</strong> la sigui<strong>en</strong>te llamada. Demuestre la funcionalidad<br />
mostrando cada vez que se llama a inflate(), y escriba código de prueba <strong>en</strong><br />
main().<br />
5. Convierta <strong>en</strong> plantilla la función de fibonacci() con los tipos que puede<br />
producir (puede g<strong>en</strong>erar long, float, etc. <strong>en</strong> vez de sólo int).<br />
6. Usar el vector de la STL como implem<strong>en</strong>tación subyac<strong>en</strong>te, para crear una<br />
platilla Set que acepte solo uno de cada tipo de objeto que se aloje <strong>en</strong> él.<br />
Cree un iterador anidado que soporte el concepto de "marcador final" de este<br />
capítulo. Escriba código de prueba para el Set <strong>en</strong> el main(), y <strong>en</strong>tonces sustituyalo<br />
por la plantilla set de la STL para comprobar que el comportami<strong>en</strong>to<br />
es correcto.<br />
7. Modifique AutoCounter.h para que pueda ser usado como un objeto miembro<br />
d<strong>en</strong>tro de cualquier clase cuya creación y destrucción quiera comprobar.<br />
Añada un miembro string para que cont<strong>en</strong>ga el nombre de la clase. Compruebe<br />
esta herrami<strong>en</strong>ta d<strong>en</strong>tro una clase suya.<br />
8. Cree una versión de OwnerStack.h que use un vector de la Librería Estándar<br />
de <strong>C++</strong> como su implem<strong>en</strong>tación subyac<strong>en</strong>te. Será necesario conocer<br />
algunas de las funciones miembro de vector para poder hacerlo (sólo hay<br />
que mirar <strong>en</strong> el archivo cabecera ).<br />
9. Modifique ValueStack.h para que pueda expandirse dinámicam<strong>en</strong>te según<br />
se introduzcan más objetos y se quede sin espacio. Cambie ValueStackTest.<br />
cpp para comprobar su nueva funcionalidad.<br />
10. Repita el ejercicio 9 pero use el vector de la STL como la implem<strong>en</strong>tación<br />
interna de ValueStack. Note lo s<strong>en</strong>cillo que es.<br />
11. Modifique ValueStackTest.cpp para que use un vector de la STL <strong>en</strong><br />
vez de un Stack <strong>en</strong> el main(). Dése cu<strong>en</strong>ta del comportami<strong>en</strong>to <strong>en</strong> tiempo<br />
de ejecución: ¿Se g<strong>en</strong>era un grupo de objetos por defecto cuando se crea el<br />
vector<br />
519<br />
✐<br />
✐<br />
✐<br />
✐