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