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 475 — #513<br />
✐<br />
15.14. Ejercicios<br />
a Roedor, rell<strong>en</strong>elo con distintos tipos de roedores y llame a los métodos de la<br />
clase base para ver lo que ocurre.<br />
7. Modifique el Ejercicio 6 para que use un vector <strong>en</strong> vez de un<br />
array de punteros. Asegurese que se hace un limpiado correcto de la memoria.<br />
8. Empezando con la jerarquía anterior de Roedor, herede un HamsterAzul de<br />
Hamster (si, existe algo así, tuve uno cuando era niño), sobreescriba los métodos<br />
de la clase base y muestre que el código que llama a los métodos de clase<br />
base no necesitan cambiar para adecuarse el nuevo tipo.<br />
9. A partir de la jerarquía Roedor anterior, añadaun destructor no virtual, cree<br />
un objeto de la Hamster usando new, haga un upcast del puntero a Roedor*,<br />
y borre el puntero con delete para ver si no se llama a los destructores <strong>en</strong> la<br />
jerarquía. Cambie el destructor a virtual y demuestre que el comportami<strong>en</strong>to<br />
es ahora correcto.<br />
10. Modifique Roedor para convertirlo <strong>en</strong> una clase base pura abstracta.<br />
11. Cree un sistema de control aéreo con la clase base Avion y varios tipos derivados.<br />
Cree una clase Torre con un vector que <strong>en</strong>vie los m<strong>en</strong>sajes<br />
adecuados a los distintos aviones que están bajo su control.<br />
12. Cree un modelo de invernadero heredando varios tipos de Plantas y construy<strong>en</strong>do<br />
mecanismos <strong>en</strong> el invernadero que se ocup<strong>en</strong> de las plantas.<br />
13. En Early.cpp, haga a Pet una clase base abstracta pura.<br />
14. En AddingVirtuals.cpp, haga a todas las funciones miembro de Pet virtuales<br />
puras, pero proporcione una definición para name(). Arregle Dog como<br />
sea necesario, usando la definición de name() que se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> la clase base.<br />
15. Escriba un pequeño programa para mostrar la difer<strong>en</strong>cia <strong>en</strong>tre llamar a una<br />
función virtual d<strong>en</strong>tro de una función miembro normal y llamar a una función<br />
virtual d<strong>en</strong>tro de un constructor. El programa de probar que las dos llamadas<br />
produc<strong>en</strong> difer<strong>en</strong>tes resultados.<br />
16. Modifique VirtualsInDestructors.cpp por heredando una clase de D-<br />
erived y sobreescribi<strong>en</strong>do f() y el destructor. En main(), cree y haga un<br />
upcast de un objeto de su nuevo tipo, después borrelo.<br />
17. Use el Ejercicio 16 y añada llamadas a f() <strong>en</strong> cada destructor. Explique que<br />
ocurre.<br />
18. Cree un clase que t<strong>en</strong>ga un dato miembro y una clase derivada que añada otro<br />
dato miembro. Escriba una función no miembro que use un objeto de la clase<br />
base por valor e imprima el tamaño del objeto usando sizeof. En el main()<br />
cree un objeto de la clase derivada, imprima su tamaño, y llame a su función.<br />
Explique lo que ocurre.<br />
19. Cree un ejemplo s<strong>en</strong>cillo de una llamada a una función virtual y g<strong>en</strong>ere su<br />
salida <strong>en</strong> <strong>en</strong>samblador. Localize el código <strong>en</strong> <strong>en</strong>samblador para la llamada a la<br />
función virtual y explique el código.<br />
20. Escriba una clase con una función virtual y una función no virtual. Herede una<br />
nueva clase, haga un objeto de esa clase, y un upcast a un puntero del tipo de la<br />
clase base. Use la función clock() que se <strong>en</strong>cu<strong>en</strong>tra <strong>en</strong> (necesitará<br />
echar un vistazo a su librerí C) para medir la difer<strong>en</strong>cia <strong>en</strong>tre una llamada<br />
475<br />
✐<br />
✐<br />
✐<br />
✐