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 Text
que
contenga un objeto string
para que
guarde el texto de un fichero. Póngale dos constructores: un
constructor por defecto y un constructor que tome un
argumento de tipo string
que sea el
nombre del fichero que se vaya a abrir. Cuando se utilice el
segundo constructor, abra el fichero y ponga su contenido en
el atributo string
. Añada un método
llamado contents()
que retorne el
string
para que, por ejemplo, se pueda
imprimir. En main()
abra un fichero
utilizando Text
e imprima el contenido
en pantalla.
Cree una clase Message
con un
constructor que tome un sólo string
con
un valor por defecto. Cree un atributo privado
string
y asigne en el constructor el
argumento string
al atributo
string
. Cree dos métodos sobrecargados
llamados print()
: uno que no tome
argumentos y que imprima simplemente el mensaje guardado en
el objeto, y el otro que tome un argumento
string
, que imprima el mensaje interno
además del argumento. ¿Tiene sentido utilizar esta
aproximación en vez de la utilizada por el constructor?
Descubra cómo generar código ensamblador con su compilador y haga experimentos para deducir el esquema de decoración de nombres.
Cree una clase que contenga cuatro métodos con 0,
1, 2 y 3 argumentos de tipo int
respectivamente. Cree un main()
que
haga un objeto de su clase y llame a cada método. Ahora
modifique la clase para que tenga sólo un método con todos
los argumentos por defecto. ¿Eso cambia su
main()
?
Cree una función con dos argumentos y llámela desde
main()
. Ahora haga que uno de los
argumentos sea un argumento de relleno (sin identificador) y
compruebe si necesita hacer cambios en
main()
.
Modifique Stash3.h
y
Stash3.cpp
para que el constructor
utilice argumentos por defecto. Pruebe el constructor
haciendo dos versiones diferentes de un objeto
Stash
.
Cree una nueva versión de la clase Stack
(del Capítulo 6) que contenga el constructor por defecto al
igual que antes, y un segundo constructor que tome como
argumentos un array de punteros a objetos y el tamaño del
array. Este constructor debería recorrer el array y poner cada
puntero en la pila (Stack
). Pruebe su
clase con un array de string
's.
Modifique SuperVar
para que haya
#ifdef
's que engloben el código de
vartype
tal como se describe en la
sección sobre enumeraciones. Cambie
vartype
como una enumeración pública (sin
ejemplares) y modifique print()
para
que requiera un argumento de tipo vartype
que le indique qué tiene qué hacer.
Implemente Mem2.h
y asegúrese
de que la clase modificada todavía funciona con
MemTest.cpp
.
Utilice la clase Mem
para implementar
Stash
. Note que debido a que la
implementación es privada y por tanto oculta al programador
cliente, no necesita modificar el código de prueba.
Añada un método bool moved() en la
clase Mem
que tome el resultado de
una llamada a pointer()
y le diga si el
puntero ha cambiado (debido a una reasignación). Escriba una
función main()
que pruebe su método
moved()
. ¿Tiene más sentido utilizar
algo como moved()
o simplemente invocar
pointer()
cada vez que necesite acceder
a la memoria de Mem
?