Tabla de contenidos
Las referencias son como punteros constantes que el compilador de-referencia automáticamente.
Aunque las referencias también existen en Pascal, la versión de C++ se tomó del lenguaje Algol. Las referencias son esenciales en C++ para ayudar en la sintaxis de los operadores sobrecargados (vea el capítulo 12) y, además, son una buena forma para controlar la manera en que los argumentos se pasan a las funciones tanto hacia dentro como hacia fuera.
En este capítulo primero verá la diferencia entre los punteros en C y en C++, y luego se presentarán las referencias. Pero la mayor parte del capítulo ahondará en el asunto un tanto confuso para los programadores de C++ novatos: el constructor de copia, un constructor especial (que usa referencias) y construye un nuevo objeto de otro ya existente del mismo tipo. El compilador utiliza el constructor de copia para pasar y retornar objetos por valor a las funciones.
Finalmente, se hablará sobre la característica (un tanto oscura) de los punteros-a-miembro de C++.
La diferencia más importante entre los punteros en C y en C++ es
que los de C++ están fuertemente tipados. Sobre todo en lo que
al tipo void *
se refiere. C no permite asignar un
puntero de un tipo a otro de forma casual, pero
sí permite hacerlo mediante un void
*
. Por ejemplo,
Bird* b; Rock* r; void* v; v = r; b = v;
A causa de esta «característica» de C, puede utilizar cualquier tipo como si de otro se tratara sin ningún aviso por parte del compilador. C++ no permite hacer esto; el compilador da un mensaje de error, y si realmente quiere utilizar un tipo como otro diferente, debe hacerlo explícitamente, tanto para el compilador como para el lector, usando molde (cast en inglés). (En el capítulo 3 se habló sobre la sintaxis mejorada del molde «explícito»).