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

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

Saved successfully!

Ooh no, something went wrong!