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

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

Saved successfully!

Ooh no, something went wrong!