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 304 — #342<br />
✐<br />
Capítulo 10. Control de nombres<br />
8. En StaticDestructors.cpp, experim<strong>en</strong>te con el ord<strong>en</strong> de llamada de los<br />
constructores y destructores llamando a f() y g() d<strong>en</strong>tro de main() <strong>en</strong> difer<strong>en</strong>tes<br />
órd<strong>en</strong>es. ¿Su compilador inicializa los objetos de la forma correcta<br />
9. En StaticDestructors.cpp, pruebe el manejo de errores por defecto de<br />
su implem<strong>en</strong>tación convirti<strong>en</strong>do la definición original de out d<strong>en</strong>tro de una<br />
declaración extern, y poni<strong>en</strong>do la definición real después de la definición<br />
de a (donde el constructor de Obj manda información a out). Asegúrese que<br />
no hay ningún otro programa importante funcionando <strong>en</strong> su máquina cuando<br />
ejecute el código o que su máquina maneje las faltas robustam<strong>en</strong>te.<br />
10. Pruebe que las variables estáticas de fichero <strong>en</strong> los archivos de cabecera no<br />
chocan <strong>en</strong>tre sí cuando son incluidas <strong>en</strong> más de un archivo cpp.<br />
11. Cree una única clase que cont<strong>en</strong>ga un int, un constructor que inicialice el int<br />
con su argum<strong>en</strong>to, un método que cambie el valor del int con su argum<strong>en</strong>to y<br />
una función print() que muestre por pantalla el int. Coloque su clase <strong>en</strong> un<br />
archivo de cabecera e incluya dicho archivo <strong>en</strong> dos archivos cpp. En uno de<br />
ellos cree una instancia de la clase y <strong>en</strong> la otra declare ese id<strong>en</strong>tificador como<br />
extern y pruebe d<strong>en</strong>tro de main(). Recuerde, debe <strong>en</strong>lazar los dos archivos<br />
objeto o de lo contrario el <strong>en</strong>lazador no <strong>en</strong>contrará el objeto.<br />
12. Cree la instancia del objeto del Ejercicio 11 como static y verifique que, debido<br />
a eso, el <strong>en</strong>lazador es incapaz de <strong>en</strong>contrarla.<br />
13. Declare una función <strong>en</strong> un archivo de cabecera. Defina la función <strong>en</strong> un archivo<br />
cpp y llámela desde main() <strong>en</strong> un segundo archivo cpp. Compile y verifique<br />
que funciona. Ahora cambie la definición de la función de forma que sea static<br />
y verifique que el <strong>en</strong>lazador no puede <strong>en</strong>contrarla.<br />
14. Modifique Volatile.cpp del Capítulo 8 para hacer que comm::isr() funcione<br />
realm<strong>en</strong>te como una rutina de servicio de interrupción. Pista: una rutina<br />
de servicio de interrupción no toma ningún argum<strong>en</strong>to.<br />
15. Escriba y compile un único programa que utilice las palabras clave auto y<br />
register.<br />
16. Cree un archivo de cabecera que cont<strong>en</strong>ga un espacio de nombres. D<strong>en</strong>tro del<br />
espacio de nombres cree varias declaraciones de funciones. Cree ahora un segundo<br />
archivo de cabecera que incluya el primero y continúe el espacio de<br />
nombres, añadi<strong>en</strong>do varias declaraciones de funciones más. Cree ahora un archivo<br />
cpp que incluya el segundo archivo de cabecera. Cambie su espacio de<br />
nombres a otro nombre (más corto). D<strong>en</strong>tro de una definición de función, llame<br />
a una de sus funciones utilizando la resolución de ámbito. D<strong>en</strong>tro de una<br />
definición de función separada, escriba una directiva using para introducir su<br />
espacio de nombres <strong>en</strong> el ámbito de esa función, y demuestre que no necesita<br />
utilizar la resolución de ámbito para llamar a las funciones desde su espacio de<br />
nombres.<br />
17. Cree un archivo de cabecera con un espacio de nombres sin nombre. Incluya<br />
la cabecera <strong>en</strong> dos archivos cpp difer<strong>en</strong>tes y demuestre que un espacio sin<br />
nombre es único para cada :unidad de traducción.<br />
18. Utilizando el archivo de cabecera del Ejercicio 17, demuestre que los nombres<br />
de un espacio de nombres sin nombre están disponibles automáticam<strong>en</strong>te <strong>en</strong><br />
una :unidad de traducción sin calificación.<br />
304<br />
✐<br />
✐<br />
✐<br />
✐