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 307 — #345<br />
✐<br />
11: Las refer<strong>en</strong>cias y el constructor<br />
de copia<br />
Las refer<strong>en</strong>cias son como punteros constantes que el compilador<br />
de-refer<strong>en</strong>cia automáticam<strong>en</strong>te.<br />
Aunque las refer<strong>en</strong>cias también exist<strong>en</strong> <strong>en</strong> Pascal, la versión de <strong>C++</strong> se tomó del<br />
l<strong>en</strong>guaje Algol. Las refer<strong>en</strong>cias son es<strong>en</strong>ciales <strong>en</strong> <strong>C++</strong> para ayudar <strong>en</strong> la sintaxis de<br />
los operadores sobrecargados (vea el capítulo 12) y, además, son una bu<strong>en</strong>a forma<br />
para controlar la manera <strong>en</strong> que los argum<strong>en</strong>tos se pasan a las funciones tanto hacia<br />
d<strong>en</strong>tro como hacia fuera.<br />
En este capítulo primero verá la difer<strong>en</strong>cia <strong>en</strong>tre los punteros <strong>en</strong> C y <strong>en</strong> <strong>C++</strong>, y<br />
luego se pres<strong>en</strong>tarán las refer<strong>en</strong>cias. Pero la mayor parte del capítulo ahondará <strong>en</strong> el<br />
asunto un tanto confuso para los programadores de <strong>C++</strong> novatos: el constructor de<br />
copia, un constructor especial (que usa refer<strong>en</strong>cias) y construye un nuevo objeto de<br />
otro ya exist<strong>en</strong>te del mismo tipo. El compilador utiliza el constructor de copia para<br />
pasar y retornar objetos por valor a las funciones.<br />
Finalm<strong>en</strong>te, se hablará sobre la característica (un tanto oscura) de los punteros-amiembro<br />
de <strong>C++</strong>.<br />
11.1. Punteros <strong>en</strong> <strong>C++</strong><br />
La difer<strong>en</strong>cia más importante <strong>en</strong>tre los punteros <strong>en</strong> C y <strong>en</strong> <strong>C++</strong> es que los de<br />
<strong>C++</strong> están fuertem<strong>en</strong>te tipados. Sobre todo <strong>en</strong> lo que al tipo void * se refiere. C no<br />
permite asignar un puntero de un tipo a otro de forma casual, pero sí permite hacerlo<br />
mediante un void *. Por ejemplo,<br />
Bird* b;<br />
Rock* r;<br />
void* v;<br />
v = r;<br />
b = v;<br />
A causa de esta «característica» de C, puede utilizar cualquier tipo como si de<br />
otro se tratara sin ningún aviso por parte del compilador. <strong>C++</strong> no permite hacer esto;<br />
el compilador da un m<strong>en</strong>saje de error, y si realm<strong>en</strong>te quiere utilizar un tipo como otro<br />
difer<strong>en</strong>te, debe hacerlo explícitam<strong>en</strong>te, tanto para el compilador como para el lector,<br />
usando molde (cast <strong>en</strong> inglés). (En el capítulo 3 se habló sobre la sintaxis mejorada<br />
del molde «explícito»).<br />
307<br />
✐<br />
✐<br />
✐<br />
✐