Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐