Tabla de contenidos
Las referencias son como punteros constantes que el compilador dereferencia 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) que construye un nuevo objeto a partir 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 C++ es un lenguaje más fuertemente tipado. Esto se nota sobre todo en lo que al tipo void * se refiere. C no permite asignar un puntero de un tipo a otro sin más, 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, lo que deja un gran agujero en el sistema de tipos. 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 un molde (cast en inglés). (En el Capítulo 3 se habló sobre la sintaxis mejorada del molde «explícito»).