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 432 — #470<br />

✐<br />

Capítulo 14. Her<strong>en</strong>cia y Composición<br />

8. Modificar NameHiding.cpp añadi<strong>en</strong>do tres funciones sobrecargadas llamadas<br />

h() <strong>en</strong> Base y mostrar como redefini<strong>en</strong>do una de ellas <strong>en</strong> una clase derivada<br />

oculta las otras.<br />

9. Crear una clase StringVector que herede de vector y redefinir push_back<br />

y el operador [] para aceptar y producir string*. ¿Qué ocurre si int<strong>en</strong>ta utilizar<br />

push_back() un void*<br />

10. Escribir una clase que cont<strong>en</strong>ga muchos tipos y utilice una llamada a una función<br />

pseudo-constructor que utiliza la misma sintaxis de un constructor.Utilizarla<br />

<strong>en</strong> el constructor para inicializar los tipos.<br />

11. Crear una clase llamada Asteroid. Utilizar la her<strong>en</strong>cia para especializar la clase<br />

PStash del capítulo 13 (PStash.h y PStash.cpp) para que la acepte y retorne<br />

punteros a Asteroid. También modifique PStashTest.cpp para comprobar sus<br />

clases. Cambiar la clase para que PStash sea un objeto miembro.<br />

12. Repita el ejercicio 11 con un vector <strong>en</strong> vez de la clase PStash.<br />

13. En SynthesizedFunctions.cpp, modifique Chess para proporcionarle un constructor<br />

por defecto, un constructor copia y un operador de asignación. Demostrar<br />

que han sido escritos correctam<strong>en</strong>te.<br />

14. Crear dos clases llamadas Traveler y Pager sin constructores por defecto, pero<br />

con constructores que toman un argum<strong>en</strong>to del tipo string, el cual simplem<strong>en</strong>te<br />

lo copia a una variable interna del tipo string. Para cada clase, escribir correctam<strong>en</strong>te<br />

un constructor copia y el operador de asignación. Entonces cree la clase<br />

BusinessTraveler que hereda de Traveler y crear ub objeto miembro Pager<br />

d<strong>en</strong>tro ella. Escribir correctam<strong>en</strong>te el constructor por defecto, un constructor<br />

que tome una cad<strong>en</strong>a como argum<strong>en</strong>to, un constructor copia y un operador de<br />

asignación.<br />

15. Crear una clase con dos funciones miembro estáticas. Herede de estas clases y<br />

redefina una de las funciones miembro. Mostrar que la otra función se oculta<br />

<strong>en</strong> la clase derivada.<br />

16. Mejorar las funciones miembro de ifstream. En FName2.cpp, int<strong>en</strong>tar suprimirlas<br />

del objeto file.<br />

17. Utilice la her<strong>en</strong>cia privada y protegida para crear dos nuevas clases desde la<br />

clase base. Int<strong>en</strong>te convertir los objetos de las clases derivadas <strong>en</strong> la clase base.<br />

Explicar lo que ocurre.<br />

18. En Protected.cpp, añadir una función miembro <strong>en</strong> Derived que llame al miembro<br />

protegido de Base read().<br />

19. Cambiar Protected.cpp para que Derived utilice her<strong>en</strong>cia protegida. Compruebe<br />

si puede llamar a value() desde un objeto Derived.<br />

20. Crear una clase llamada SpaceShip con un metodo fly(). Crear Shuttle que hereda<br />

de SpaceShip y añadir el metodo land(). Creat un nuevo Shuttle, convertirlo<br />

por puntero o refer<strong>en</strong>ciaa SpaceShip e int<strong>en</strong>te llamar al metodo land(). Explicar<br />

los resultados.<br />

21. Modificar Instrum<strong>en</strong>t.cpp para añadir un método prepare() a Instrum<strong>en</strong>t. Llamar<br />

a prepare () d<strong>en</strong>tro de tune().<br />

432<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!