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 186 — #224<br />

✐<br />

Capítulo 5. Ocultar la implem<strong>en</strong>tación<br />

4. Escriba dos clases, cada una de ellas con un método que reciba como argum<strong>en</strong>to<br />

un puntero a un objeto de la otra clase. Cree instancias de ambas clases <strong>en</strong><br />

main() y llame a los métodos antes m<strong>en</strong>cionados de cada clase.<br />

5. Cree tres clases. La primera conti<strong>en</strong>e miembros privados, y declara como fri<strong>en</strong>d<br />

a toda la segunda estructura y a una función miembro de la tercera. En<br />

main() demuestre que todo esto funciona correctam<strong>en</strong>te.<br />

6. Cree una clase H<strong>en</strong>. D<strong>en</strong>tro de ésta, inserte una clase Nest. Y d<strong>en</strong>tro de ésta<br />

una clase Egg. Cada clase debe t<strong>en</strong>er un método display(). En main(), cree<br />

una instancia de cada clase y llame a la función display() de cada una.<br />

7. Modifique el ejercicio 6 para que Nest y Egg cont<strong>en</strong>gan datos privados. De<br />

acceso mediante fri<strong>en</strong>d para que las clases puedan acceder a los cont<strong>en</strong>idos<br />

privados de las clases que conti<strong>en</strong><strong>en</strong>.<br />

8. Cree una clase con atributos diseminados por numerosas secciones public,<br />

private y protected. Añada el método ShowMap() que imprima por pantalla<br />

los nombres de cada uno de esos atributos y su dirección de memoria. Si<br />

es posible, compile y ejecute este programa con más de un compilador y/o ord<strong>en</strong>ador<br />

y/o sistema operativo para ver si exist<strong>en</strong> difer<strong>en</strong>cias <strong>en</strong> las posiciones<br />

<strong>en</strong> memoria.<br />

9. Copie la implem<strong>en</strong>tación y ficheros de prueba de Stash del capítulo 4 para así<br />

poder compilar y probar el Stash.h de este capítulo.<br />

10. Ponga objetos de la clase Hern definidos <strong>en</strong> el ejercicio 6 <strong>en</strong> un Stash. Apunte<br />

a ellos e imprímalos (si no lo ha hecho aún necesitará una función H<strong>en</strong>::print()).<br />

11. Copie los ficheros de implem<strong>en</strong>tación y la prueba de Stack del capítulo 4 y<br />

compile y pruebe el Stack2.h de este capítulo.<br />

12. Ponga objetos de la clase H<strong>en</strong> del ejercicio 6 d<strong>en</strong>tro de Stack. Apunte a ellos e<br />

imprímalos (si no lo ha hecho aún, necesitara añadir un H<strong>en</strong>::print()).<br />

13. Modifique Chesire <strong>en</strong> Handle.cpp, y verifique que su <strong>en</strong>torno de desarrollo<br />

recompila y reemplaza sólo este fichero, pero no recompila UseHandle.cpp.<br />

14. Cree una clase StackOfInt (una pila que guarda <strong>en</strong>teros) usando la técnica<br />

«Gato de Chesire» que esconda la estructura de datos de bajo nivel que usa<br />

para guardar los elem<strong>en</strong>tos, <strong>en</strong> una clase llamada StackImp. Implem<strong>en</strong>te dos<br />

versiones de StackImp: una que use un array de longitud fija de <strong>en</strong>teros, y<br />

otra que use un vector. Ponga un tamaño máximo para la pila preestablecido,<br />

así no se t<strong>en</strong>drá que preocupar de expandir el array <strong>en</strong> la primera<br />

versión. Fíjese que la clase StackOfInt.h no ti<strong>en</strong>e que cambiar con Stack-<br />

Imp.<br />

186<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!