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

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

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

Saved successfully!

Ooh no, something went wrong!