Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐