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