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 330 — #368<br />

✐<br />

Capítulo 11. Las refer<strong>en</strong>cias y el constructor de copia<br />

19. Cree una clase con un constructor de copia que se anuncie a sí mismo (es decir<br />

que imprima por la salida que ha sido llamado). Haga una segunda clase que<br />

cont<strong>en</strong>ga un objeto miembro de la primera clase, pero no cree un constructor<br />

de copia. Demuestre que el constructor de copia, que g<strong>en</strong>era automáticam<strong>en</strong>te<br />

el compilador <strong>en</strong> la segunda clase, llama al constructor de copia de la primera.<br />

20. Cree una clase muy simple, y una función que devuelva un objeto de esa clase<br />

por valor. Cree una segunda función que tome una refer<strong>en</strong>cia de un objeto de<br />

su clase. Llame a la segunda función pasándole como argum<strong>en</strong>to una llamada<br />

a la primera función, y demuestre que la segunda función debe utilizar una<br />

refer<strong>en</strong>cia constante como argum<strong>en</strong>to.<br />

21. Cree una clase simple sin constructor de copia, y una función simple que tome<br />

un objeto de esa clase por valor. Ahora cambie su clase añadiéndole una declaración<br />

(sólo declare, no defina) privada de un constructor de copia. Explique<br />

lo que ocurre cuando compila la función.<br />

22. Este ejercicio crea una alternativa a la utilización del constructor de copia. Cree<br />

una clase X y declare (pero no defina) un constructor de copia privado. Haga<br />

una función clone() pública como un método constante que devuelve una<br />

copia del objeto creado utilizando new. Ahora escriba una función que tome<br />

como argum<strong>en</strong>to un const X& y clone una copia local que puede modificarse.<br />

El inconv<strong>en</strong>i<strong>en</strong>te de esto es que es el programador el responsable de destruir<br />

explícitam<strong>en</strong>te el objeto clonado (utilizando delete) cuando haya terminado<br />

con él.<br />

23. Explique qué está mal <strong>en</strong> Mem.cpp y MemTest.cpp del Capítulo 7. Solucione<br />

el problema.<br />

24. Cree una clase que cont<strong>en</strong>ga un double y una función print() que imprima el<br />

double. Cree punteros a miembro tanto para el atributo como al método de su<br />

clase. Cree un objeto de su clase y un puntero a ese objeto, y manipule ambos<br />

elem<strong>en</strong>tos de la clase a través de los punteros a miembro, utilizando tanto el<br />

objeto como el puntero al objeto.<br />

25. Cree una clase que cont<strong>en</strong>ga un array de <strong>en</strong>teros. ¿Puede recorrer el array mediante<br />

un puntero a miembro<br />

26. Modifique PmemFunDefinition.cpp añadi<strong>en</strong>do un método f() sobrecargado<br />

(puede determinar la lista de argum<strong>en</strong>tos que cause la sobrecarga). Ahora<br />

cree un segundo puntero a miembro, asígnelo a la versión sobrecargada de<br />

f(), y llame al método a través del puntero. ¿Cómo sucede la resolución de la<br />

función sobrecargada <strong>en</strong> este caso<br />

27. Empiece con la función FunctionTable.cpp del Capítulo 3. Cree una clase<br />

que cont<strong>en</strong>ga un vector de punteros a funciones, con métodos add() y remove()<br />

para añadir y quitar punteros a función. Añada una función d<strong>en</strong>ominada<br />

run() que recorra el vector y llame a todas la funciones.<br />

28. Modifique el Ejercicio 27 para que funcione con punteros a métodos.<br />

330<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!