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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 220 — #258<br />

✐<br />

Capítulo 7. Sobrecarga de funciones y argum<strong>en</strong>tos por defecto<br />

7.7. Ejercicios<br />

Las soluciones a los ejercicios se pued<strong>en</strong> <strong>en</strong>contrar <strong>en</strong> el docum<strong>en</strong>to electrónico<br />

titulado «The Thinking in <strong>C++</strong> Annotated Solution Guide», disponible por poco<br />

dinero <strong>en</strong> www.BruceEckel.com.<br />

1. Cree una clase Text que cont<strong>en</strong>ga un objeto string para que guarde el texto de<br />

un fichero. Póngale dos constructores: un constructor por defecto y un constructor<br />

que tome un argum<strong>en</strong>to de tipo string que sea el nombre del fichero<br />

que se vaya a abrir. Cuando se utilice el segundo constructor, abra el fichero<br />

y ponga su cont<strong>en</strong>ido <strong>en</strong> el atributo string. Añada un método llamado cont<strong>en</strong>ts()<br />

que retorne el string para que, por ejemplo, se pueda imprimir. En<br />

main() abra un fichero utilizando Text e imprima el cont<strong>en</strong>ido <strong>en</strong> pantalla.<br />

2. Cree una clase Message con un constructor que tome un sólo string con un<br />

valor por defecto. Cree un atributo privado string y asigne <strong>en</strong> el constructor el<br />

argum<strong>en</strong>to string al atributo string. Cree dos métodos sobrecargados llamados<br />

print(): uno que no tome argum<strong>en</strong>tos y que imprima simplem<strong>en</strong>te el m<strong>en</strong>saje<br />

guardado <strong>en</strong> el objeto, y el otro que tome un argum<strong>en</strong>to string, que imprima<br />

el m<strong>en</strong>saje interno además del argum<strong>en</strong>to. ¿Ti<strong>en</strong>e s<strong>en</strong>tido utilizar esta aproximación<br />

<strong>en</strong> vez de la utilizada por el constructor<br />

3. Descubra cómo g<strong>en</strong>erar código <strong>en</strong>samblador con su compilador y haga experim<strong>en</strong>tos<br />

para deducir el esquema de decoración de nombres.<br />

4. Cree una clase que cont<strong>en</strong>ga cuatro métodos con 0, 1, 2 y 3 argum<strong>en</strong>tos de tipo<br />

int respectivam<strong>en</strong>te. Cree un main() que haga un objeto de su clase y llame<br />

a cada método. Ahora modifique la clase para que t<strong>en</strong>ga sólo un método con<br />

todos los argum<strong>en</strong>tos por defecto. ¿Eso cambia su main()<br />

5. Cree una función con dos argum<strong>en</strong>tos y llámela desde main(). Ahora haga<br />

que uno de los argum<strong>en</strong>tos sea un argum<strong>en</strong>to de rell<strong>en</strong>o (sin id<strong>en</strong>tificador) y<br />

compruebe si necesita hacer cambios <strong>en</strong> main().<br />

6. Modifique Stash3.h y Stash3.cpp para que el constructor utilice argum<strong>en</strong>tos<br />

por defecto. Pruebe el constructor haci<strong>en</strong>do dos versiones difer<strong>en</strong>tes de un<br />

objeto Stash.<br />

7. Cree una nueva versión de la clase Stack (del Capítulo 6) que cont<strong>en</strong>ga el<br />

constructor por defecto al igual que antes, y un segundo constructor que tome<br />

como argum<strong>en</strong>tos un array de punteros a objetos y el tamaño del array. Este<br />

constructor debería recorrer el array y poner cada puntero <strong>en</strong> la pila (Stack).<br />

Pruebe su clase con un array de string’s.<br />

8. Modifique SuperVar para que haya #ifdef’s que <strong>en</strong>glob<strong>en</strong> el código de v-<br />

artype tal como se describe <strong>en</strong> la sección sobre <strong>en</strong>umeraciones. Cambie vartype<br />

como una <strong>en</strong>umeración pública (sin ejemplares) y modifique print()<br />

para que requiera un argum<strong>en</strong>to de tipo vartype que le indique qué ti<strong>en</strong>e qué<br />

hacer.<br />

9. Implem<strong>en</strong>te Mem2.h y asegúrese de que la clase modificada todavía funciona<br />

con MemTest.cpp.<br />

10. Utilice la clase Mem para implem<strong>en</strong>tar Stash. Note que debido a que la implem<strong>en</strong>tación<br />

es privada y por tanto oculta al programador cli<strong>en</strong>te, no necesita<br />

modificar el código de prueba.<br />

220<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!