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

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 305 — #343<br />

✐<br />

10.7. Ejercicios<br />

19. Modifique Fri<strong>en</strong>dInjection.cpp para añadir una definición para la función<br />

amiga y para llamar a la función desde main().<br />

20. En Arithmetic.cpp, demuestre que la directiva using no se exti<strong>en</strong>de fuera<br />

de la función <strong>en</strong> la que fue creada.<br />

21. Repare el problema de OverridingAmbiguity.cpp, primero con resolución<br />

de ámbito y luego, con una declaración using que fuerce al compilador a escojer<br />

uno de los nombres de función idénticos.<br />

22. En dos archivos de cabecera, cree dos espacios de nombres, cada uno cont<strong>en</strong>i<strong>en</strong>do<br />

una clase (con todas las definiciones inline) con idéntico nombre que<br />

el del otro espacio de nombres. Cree un archivo cpp que incluya ambos archivos.<br />

Cree una función y, d<strong>en</strong>tro de la función, utilice la directiva using para<br />

introducir ambos espacios de nombres. Pruebe a crear un objeto de la clase y<br />

vea que sucede. Haga las directivas using globales (fuera de la función) para<br />

ver si existe alguna difer<strong>en</strong>cia. Repare el problema usando la resolución de<br />

ámbito, y cree objetos de ambas clases.<br />

23. Repare el problema del Ejercicio 22 con una declaración using que fuerce al<br />

compilador a escojer uno de los nombres de clase idénticos.<br />

24. Extraiga las declaraciones de espacios de nombres de BobsSuperDuperLibrary.<br />

cpp y UnnamedNamespaces.cpp y póngalos <strong>en</strong> archivos separados, dando<br />

un nombre al espacio de nombres sin nombre <strong>en</strong> el proceso. En un tercer archivo<br />

de cabecera, cree un nuevo espacio de nombres que combine los elem<strong>en</strong>tos<br />

de los otros dos espacios de nombres con declaraciones using. En main(),<br />

introduzca su nuevo espacio de nombres con una directiva using y acceda a<br />

todos los elem<strong>en</strong>tos de su espacio de nombres.<br />

25. Cree un archivo de cabecera que incluya y pero que<br />

no use ninguna directiva using ni ninguna declaración using. Añada guardas<br />

de inclusión como ha visto <strong>en</strong> los archivos de cabecera del libro. Cree una<br />

clase con todas las funciones inline que muestre por pantalla el string. Cree<br />

un archivo cpp y ejercite su clase <strong>en</strong> main().<br />

26. Cree una clase que cont<strong>en</strong>ga un static double y long. Escriba un método estático<br />

que imprima los valores.<br />

27. Cree una clase que cont<strong>en</strong>ga un int, un constructor que inicialice el int con<br />

su argum<strong>en</strong>to, y una función print() que muestre por pantalla el int. Cree<br />

ahora una segunda clase que cont<strong>en</strong>ga un objeto estático de la primera. Añada<br />

un método estático que llame a la función print() del objeto estático. Ejercitu<br />

su clase <strong>en</strong> main().<br />

28. Cree una clase que cont<strong>en</strong>ga un array estático de int constante y otro no constante.<br />

Escriba métodos estáticos que impriman los arrays. Experim<strong>en</strong>te con su<br />

clase <strong>en</strong> main().<br />

29. Cree una clase que cont<strong>en</strong>ga un string, con un constructor que inicialice el<br />

string a partir de su argum<strong>en</strong>to, y una función print() que imprima el string.<br />

Cree otra clase que cont<strong>en</strong>ga un array estático, tanto constante como no constante,<br />

de objetos de la primera clase, y métodos estáticos para imprimir dichos<br />

arrays. Experim<strong>en</strong>te con la segunda clase <strong>en</strong> main().<br />

30. Cree una struct que cont<strong>en</strong>ga un int y un constructor por defecto que inicialice<br />

el int a cero. Haga ese struct local a una función. D<strong>en</strong>tro de dicha función,<br />

cree un array de objetos de su struct y demuestre que cada int del array ha<br />

sido inicializado a cero automáticam<strong>en</strong>te.<br />

305<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!