7.7. Ejercicios

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.

  1. 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.

  2. 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?

  3. Descubra cómo generar código ensamblador con su compilador y haga experimentos para deducir el esquema de decoración de nombres.

  4. 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()?

  5. 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().

  6. 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.

  7. 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.

  8. 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.

  9. Implemente Mem2.h y asegúrese de que la clase modificada todavía funciona con MemTest.cpp.

  10. 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.

  11. 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?