Las soluciones a los ejercicios se pueden encontrar en el documento electrónico titulado «The Thinking in C++ Annotated Solution Guide», disponible por poco dinero en www.BruceEckel.com.
Cree una clase con atributos y métodos public
,
private
y protected
. Cree un objeto de
esta clase y vea qué mensajes de compilación obtiene cuando
intenta acceder a los diferentes miembros de la clase.
Escriba una estructura llamada Lib
que contenga tres objetos string a, b
y
c
. En main()
cree un
objeto Lib
llamado
x
y asígnelo a x.a, x.b
y
x.c
. Imprima por pantalla sus valores. Ahora
reemplace a, b
y c
con un array de cadenas s[3]
. Dese cuenta de
que su función main()
deja de
funcionar como resultado del cambio. Ahora cree una clase,
llámela Libc
con tres cadenas como
datos miembro privados a, b
y
c
, y métodos seta()
,
geta()
, setb()
,
getb()
, setc()
y
getc()
para establecer y recuperar los
distintos valores. Escriba una función
main()
como antes. Ahora cambie las
cadenas privadas a
, b
y c
por un array de cadenas privado
s[3]
. Vea que ahora main()
sigue funcionando.
Cree una clase y una función friend
global que manipule los datos privados de la clase.
Escriba dos clases, cada una de ellas con un método que
reciba como argumento un puntero a un objeto de la otra
clase. Cree instancias de ambas clases en
main()
y llame a los métodos antes
mencionados de cada clase.
Cree tres clases. La primera contiene miembros privados, y
declara como friend
a toda la segunda
estructura y a una función miembro de la tercera. En
main()
demuestre que todo esto funciona
correctamente.
Cree una clase Hen
. Dentro de ésta,
inserte una clase Nest
. Y dentro de
ésta una clase Egg
. Cada clase debe tener
un método display()
. En
main()
, cree una instancia de cada clase
y llame a la función display()
de cada
una.
Modifique el ejercicio 6 para que
Nest
y Egg
contengan datos privados. De acceso mediante friend
para que las clases puedan acceder a los contenidos privados
de las clases que contienen.
Cree una clase con atributos diseminados por numerosas
secciones public
, private
y
protected
. Añada el método
ShowMap()
que imprima por pantalla los
nombres de cada uno de esos atributos y su dirección de
memoria. Si es posible, compile y ejecute este programa con
más de un compilador y/o ordenador y/o sistema operativo
para ver si existen diferencias en las posiciones en
memoria.
Copie la implementación y ficheros de prueba de
Stash
del capítulo 4 para así poder
compilar y probar el Stash.h
de este
capítulo.
Ponga objetos de la clase Hern
definidos en el ejercicio 6 en un
Stash
. Apunte a ellos e imprímalos
(si no lo ha hecho aún necesitará una función
Hen::print()
).
Copie los ficheros de implementación y la prueba de
Stack
del capítulo 4 y compile y
pruebe el Stack2.h
de este capítulo.
Ponga objetos de la clase Hen
del
ejercicio 6 dentro de Stack
. Apunte a
ellos e imprímalos (si no lo ha hecho aún, necesitara añadir
un Hen::print()
).
Modifique Chesire
en
Handle.cpp
, y verifique que su entorno
de desarrollo recompila y reemplaza sólo este fichero, pero
no recompila UseHandle.cpp
.
Cree una clase StackOfInt
(una pila
que guarda enteros) usando la técnica «Gato de
Chesire» que esconda la estructura de datos de bajo
nivel que usa para guardar los elementos, en una clase
llamada StackImp
. Implemente dos
versiones de StackImp
: una que use un
array de longitud fija de enteros, y otra que use un
vector<int>
. Ponga un tamaño máximo para
la pila preestablecido, así no se tendrá que preocupar de
expandir el array en la primera versión. Fíjese que la clase
StackOfInt.h
no tiene que cambiar con
StackImp
.