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 328 — #366<br />

✐<br />

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

Una refer<strong>en</strong>cia conti<strong>en</strong>e una dirección, pero se trata como un objeto. Las refer<strong>en</strong>cias<br />

son es<strong>en</strong>ciales para una sintaxis clara con la sobrecarga de operadores (el tema del<br />

sigui<strong>en</strong>te capítulo), pero también proporcionan mejoras sintácticas para el paso y<br />

retorno de objetos <strong>en</strong> funciones normales.<br />

El constructor de copia coge una refer<strong>en</strong>cia a un objeto exist<strong>en</strong>te del mismo tipo<br />

que el argum<strong>en</strong>to, y lo utiliza para la creación de un nuevo objeto a partir del que<br />

exist<strong>en</strong>te. El compilador llama automáticam<strong>en</strong>te al constructor de copia cuando pasa<br />

o retorna un objeto por valor. Aunque el compilador crea un constructor de copia<br />

automáticam<strong>en</strong>te, si cree que su clase necesita uno, debería definirlo para asegurar<br />

un comportami<strong>en</strong>to apropiado. Si no desea que el objeto se pase o retorne por valor,<br />

debería crear un constructor de copia privado.<br />

Los punteros a miembro ti<strong>en</strong><strong>en</strong> la misma capacidad que los punteros normales:<br />

puede elegir una región de memoria particular (atributo o método) <strong>en</strong> tiempo de<br />

ejecución. Los punteros a miembro funcionan con los miembros de una clase <strong>en</strong> vez<br />

de variables o funciones globales. Ofrec<strong>en</strong> la sufici<strong>en</strong>te flexibilidad para cambiar el<br />

comportami<strong>en</strong>to <strong>en</strong> tiempo de ejecución.<br />

11.6. Ejercicios<br />

Las soluciones a los ejercicios se pued<strong>en</strong> <strong>en</strong>contrar <strong>en</strong> el docum<strong>en</strong>to electrónico<br />

titulado «The Thinking in <strong>C++</strong> Annotated Solution Guide», disponible por poco<br />

dinero <strong>en</strong> www.BruceEckel.com.<br />

1. Convierta el fragm<strong>en</strong>to de código «bird & rock» del principio de este capítulo a<br />

un programa C (utilizando estructuras para los tipos de datos), y que compile.<br />

Ahora int<strong>en</strong>te compilarlo con un compilador de <strong>C++</strong> y vea qué ocurre.<br />

2. Coja los fragm<strong>en</strong>tos de código al principio de la sección titulada «Refer<strong>en</strong>cias<br />

<strong>en</strong> <strong>C++</strong>» y póngalos <strong>en</strong> un main(). Añada s<strong>en</strong>t<strong>en</strong>cias para imprimir <strong>en</strong> la salida<br />

para que pueda demostrar usted mismo que las refer<strong>en</strong>cias son como punteros<br />

que se derefer<strong>en</strong>cian automáticam<strong>en</strong>te.<br />

3. Escriba un programa <strong>en</strong> el cual int<strong>en</strong>te (1) Crear una refer<strong>en</strong>cia que no esté<br />

inicializada cuando se crea. (2) Cambiar una refer<strong>en</strong>cia para que se refiera a<br />

otro objeto después de que se haya inicializado. (3) Crear una refer<strong>en</strong>cia nula.<br />

4. Escriba una función que tome un puntero por argum<strong>en</strong>to, modifique el cont<strong>en</strong>ido<br />

de lo que el apunta puntero, y retorne ese mismo cont<strong>en</strong>ido como si de<br />

una refer<strong>en</strong>cia se tratara.<br />

5. Cree una nueva clase con algunos métodos, y haga que el objeto sea apuntado<br />

por el argum<strong>en</strong>to del Ejercicio 4. Haga que el puntero pasado como argum<strong>en</strong>to<br />

y algunos métodos sean constantes y pruebe que sólo puede llamar a los métodos<br />

constantes d<strong>en</strong>tro de su función. Haga que el argum<strong>en</strong>to de su función<br />

sea una refer<strong>en</strong>cia <strong>en</strong> vez de un puntero.<br />

6. Coja los fragm<strong>en</strong>tos de código al principio de la sección «refer<strong>en</strong>cias a puntero»<br />

y conviértalos <strong>en</strong> un programa.<br />

7. Cree una función que tome como argum<strong>en</strong>to una refer<strong>en</strong>cia a un puntero que<br />

apunta a otro puntero y modifique ese argum<strong>en</strong>to. En main(), llame a la función.<br />

328<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!