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 273 — #311<br />

✐<br />

9.9. Ejercicios<br />

8. Coja el ejemplo NestFri<strong>en</strong>d.cpp del Capítulo 5 y reemplace todos los métodos<br />

con inline. No haga métodos inline in situ. También cambie las funciones<br />

initialize() por constructores.<br />

9. Modifique StringStack.cpp del Capítulo 8 para usar funciones inline.<br />

10. Cree un <strong>en</strong>umerado llamado Hue que cont<strong>en</strong>ga red, blue y yellow. Ahora cree<br />

una clase llamada Color que cont<strong>en</strong>ga un atributo de tipo Hue y un constructor<br />

que dé valor al Hue con su argum<strong>en</strong>to. Añada métodos de acceso al Hue<br />

get() y set(). Haga inline todos los métodos.<br />

11. Modifique el ejercicio 10 para usar el <strong>en</strong>foque «accesor» y «mutador».<br />

12. Modifique Cpptime.cpp de modo que mida el tiempo desde que comi<strong>en</strong>za el<br />

programa hasta que el usuario pulsa la tecla «Intro» o «Retorno».<br />

13. Cree una clase con dos métodos inline, el primero que está definido <strong>en</strong> la clase<br />

llama al segundo, sin necesitar una declaración adelantada. Escriba un main()<br />

que cree un objeto de esa clase y llame al primer método.<br />

14. Cree una clase A con un constructor por defecto inline que se anuncie a sí mismo.<br />

Ahora cree una nueva clase B y ponga un objeto de A como miembro de B,<br />

y dele a B un constructor inline. Cree un array de objetos B y vea qué sucede.<br />

15. Cree una gran cantidad de objetos del ejercicio anterior, y use la clase Time<br />

para medir las difer<strong>en</strong>cias <strong>en</strong>tre los contructores inline y los no-inline. (Si ti<strong>en</strong>e<br />

un perfilador, int<strong>en</strong>te usarlo también).<br />

16. Escriba un programa que tome una cad<strong>en</strong>a por línea de comandos. Escriba un<br />

bucle for que elimine un carácter de la cad<strong>en</strong>a <strong>en</strong> cada pasada, y use la macro<br />

DEGUB() de este capítulo para imprimir la cad<strong>en</strong>a cada vez.<br />

17. Corrija la macro TRACE() tal como se explica <strong>en</strong> el capítulo, y pruebe que<br />

funciona correctam<strong>en</strong>te.<br />

18. Modifique la macro FIELD() para que también incluya un índice numérico.<br />

Cree una clase cuyos miembros están compuestos de llamadas a la macro FIE-<br />

LD(). Añada un método que le permita buscar <strong>en</strong> un campo usando el índice.<br />

Escriba un main() para probar la clase.<br />

19. Modifique la macro FIELD() para que automáticam<strong>en</strong>te g<strong>en</strong>ere funciones de<br />

acceso para cada campo (data debería no obstante ser privado). Cree una clase<br />

cuyos miembros estén compuestos de llamadas a la macro FIELD(). Escriba<br />

un main() para probar la clase.<br />

20. Escriba un programa que tome dos argum<strong>en</strong>tos de línea de comandos: el primero<br />

es un <strong>en</strong>tero y el segundo es un nombre de fichero. Use requiere.h<br />

para asegurar que ti<strong>en</strong>e el número correcto de argum<strong>en</strong>tos, que el <strong>en</strong>tero está<br />

<strong>en</strong>tre 5 y 10, y que el fichero se puede abrir satisfactoriam<strong>en</strong>te.<br />

21. Escriba un programa que use la macro IFOPEN() para abrir un fichero como<br />

un flujo de <strong>en</strong>trada. Fíjese <strong>en</strong> la creación un objeto ifstream y su alcance.<br />

22. (Desafío) Averigüe cómo conseguir que su compilador g<strong>en</strong>ere código <strong>en</strong>samblador.<br />

Cree un fichero que cont<strong>en</strong>ga una función muy pequeña y un main().<br />

G<strong>en</strong>ere el código <strong>en</strong>samblador cuando la función es inline y cuando no lo es, y<br />

demuestre que la versión inline no ti<strong>en</strong>e la sobrecarga por la llamada.<br />

273<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!