Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 477 — #515<br />
✐<br />
15.14. Ejercicios<br />
31. (Avanzado) Encu<strong>en</strong>tre exactam<strong>en</strong>te cuanto tiempo más es necesario para una<br />
llamada a una función virtual buscando <strong>en</strong> la información del l<strong>en</strong>guaje <strong>en</strong>samblador<br />
de su procesador o cualquier otro manual técnico y <strong>en</strong>contrando los<br />
pulsos de reloj necesarios para una simple llamada fr<strong>en</strong>te al número necesario<br />
de las instrucciones de las funciones virtuales.<br />
32. Determine el tamaño del VPTR (usando sizeof) <strong>en</strong> su implem<strong>en</strong>tación. Ahora<br />
herede de dos clases (her<strong>en</strong>cia múltiple) que cont<strong>en</strong>gan funciones virtuales.<br />
¿Se ti<strong>en</strong>e una o dos VPTR <strong>en</strong> la clase derivada<br />
33. Cree una clase con datos miembros y funciones virtuales. Escriba una función<br />
que mire <strong>en</strong> la memoria de un objeto de su clase y que imprima sus distintos<br />
fragm<strong>en</strong>tos. Para hacer esto será necesario experim<strong>en</strong>tar y de forma iterativa<br />
descubrir donde se <strong>en</strong>cu<strong>en</strong>tra alojado el VPTR del objeto.<br />
34. Imagine que las funciones virtuales no exist<strong>en</strong>, y modifique Instrum<strong>en</strong>t4.<br />
cpp para que use moldeado dinámico para hacer el equival<strong>en</strong>te de las llamadas<br />
virtuales. Esplique porque es una mala idea.<br />
35. Modifique StaicHierarchyNavigation.cpp para que <strong>en</strong> vez de usar el<br />
RTTI de <strong>C++</strong> use su propio RTTI via una función virtual <strong>en</strong> la clase base llamada<br />
whatAmI() y un <strong>en</strong>um type { Circulos, Cuadrados };.<br />
36. Comi<strong>en</strong>ce con PointerToMemberOperator.cpp del capítulo 12 y demuestre<br />
que el polimorfismo todavía funciona con punteros a miembros, incluso si<br />
operator->* está sobrecargado.<br />
477<br />
✐<br />
✐<br />
✐<br />
✐