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 329 — #367<br />
✐<br />
11.6. Ejercicios<br />
8. Cree una función que toma un argum<strong>en</strong>to del tipo char& y lo modifica. En<br />
el main() imprima a la salida una variable char, llame a su función con esa<br />
variable e imprima la variable de nuevo para demostrar que ha sido cambiada.<br />
¿Cómo afecta esto a la legibilidad del programa<br />
9. Escriba una clase que ti<strong>en</strong>e un método constante y otra que no lo ti<strong>en</strong>e. Escriba<br />
tres funciones que toman un objeto de esa clase como argum<strong>en</strong>to; la primera lo<br />
toma por valor, la segunda lo toma por refer<strong>en</strong>cia y la tercera lo toma mediante<br />
una refer<strong>en</strong>cia constante. D<strong>en</strong>tro de las funciones, int<strong>en</strong>te llamar a las dos<br />
funciones de su clase y explique los resultados.<br />
10. (Algo difícil) Escriba una función simple que toma un <strong>en</strong>tero como argum<strong>en</strong>to,<br />
increm<strong>en</strong>ta el valor, y lo retorna. En main(), llame a su función. Int<strong>en</strong>te que<br />
el compilador g<strong>en</strong>ere el código <strong>en</strong>samblador e int<strong>en</strong>te <strong>en</strong>t<strong>en</strong>der cómo los argum<strong>en</strong>tos<br />
se pasan y se retornan, y cómo las variables locales se colocan <strong>en</strong> la<br />
pila.<br />
11. Escriba una función que tome como argum<strong>en</strong>tos un char, int, float y double.<br />
G<strong>en</strong>ere el código <strong>en</strong>samblador con su compilador y busque las instrucciones<br />
que apilan los argum<strong>en</strong>tos <strong>en</strong> la pila antes de efectuar la llamada a función.<br />
12. Escriba una función que devuelva un double. G<strong>en</strong>ere el código <strong>en</strong>samblador y<br />
explique cómo se retorna el valor.<br />
13. G<strong>en</strong>ere el código <strong>en</strong>samblador de PassingBigStructures.cpp. Recorra y<br />
desmitifique la manera <strong>en</strong> que su compilador g<strong>en</strong>era el código para pasar y<br />
devolver estructuras grandes.<br />
14. Escriba una simple función recursiva que disminuya su argum<strong>en</strong>to y retorne<br />
cero si el argum<strong>en</strong>to llega a cero, o <strong>en</strong> otro caso que se llame a sí misma. G<strong>en</strong>ere<br />
el código <strong>en</strong>samblador para esta función y explique la forma <strong>en</strong> el compilador<br />
implem<strong>en</strong>ta la recurr<strong>en</strong>cia.<br />
15. Escriba código para demostrar que el compilador g<strong>en</strong>era un constructor de copia<br />
automáticam<strong>en</strong>te <strong>en</strong> caso de que no lo haga el programador. Demuestre<br />
que el constructor de copia g<strong>en</strong>erado por el compilador realiza una copia bit a<br />
bit de tipos primitivos y llama a los constructores de copia de los tipos definidos<br />
por el usuario.<br />
16. Escriba una clase <strong>en</strong> la que el constructor de copia se anuncia a sí mismo a<br />
través de cout. Ahora cree una función que pasa un objeto de su nueva clase<br />
por valor y otra más que crea un objeto local de su nueva clase y lo devuelve<br />
por valor. Llame a estas funciones para demostrar que el constructor de copia<br />
es, <strong>en</strong> efecto, llamado cuando se pasan y retornan objetos por valor.<br />
17. Cree un objeto que cont<strong>en</strong>ga un double*. Que el constructor inicialice el double*<br />
llamando a new double y asignando un valor. Entonces, que el destructor<br />
imprima el valor al que apunta, asigne ese valor a -1, llame a delete para<br />
liberar la memoria y ponga el puntero a cero. Ahora cree una función que tome<br />
un objeto de su clase por valor, y llame a esta función desde main(). ¿Qué<br />
ocurre Solucione el problema escribi<strong>en</strong>do un constructor de copia.<br />
18. Cree una clase con un constructor que parezca un constructor de copia, pero<br />
que t<strong>en</strong>ga un argum<strong>en</strong>to adicional con un valor por defecto. Muestre que a<br />
pesar de eso se utiliza como constructor de copia.<br />
329<br />
✐<br />
✐<br />
✐<br />
✐