Además de la declaración normal de variables, C++ permite que se declaren referencias como sinónimos de variables:
#include <iostream.h>
main()
{
int numero = 12;
int &ref = numero;
cout << "número tiene el valor:" << numero << '\n';
numero = 17;
cout << "ref tiene el valor:" << ref << '\n';
}
que produce la siguiente salida por pantalla:
número tiene el valor:12
ref tiene el valor:17
En este ejemplo, ref es una referencia a un entero, numero. Por tanto, ambos ocupan la misma localización de memoria. La referencia ref se convierte en sinónimo de la variable numero. Las dos operaciones:
numero ++;
ref ++;
tienen el mismo efecto.
Cuando se declara, una referencia debe ser siempre inicializada
para referenciar a una variable. En caso contrario, el compilador dará error. Después
de su inicialización, la referencia no puede cambiarse para referenciar a otra variable.
La forma en que el compilador de C++ implementa las referencias es usando punteros internamente, es decir, las referencias en C++ son punteros ordinarios en lo que concierne al compilador. Sin embargo, el programador no ha de preocuparse por ello.
Las principales diferencias entre punteros y referencias son:
int &ref;
external
(se supone que estas referencias se han inicializado en alguna otra parte),
referencias como argumentos de funciones (la llamada inicializa la referencia), referencias como
tipo devueltos por funciones (la función determina a qué se referirá el valor
devuelto) y referencias como miembros de clases. En cambio, los punteros son variables por
sí mismas: apuntan, bien a algo concreto, o a 'nada'.
int &func (void) { int value; return (value); }Esto permite las siguientes utilizaciones:
func () = 20; func () + = func();Tales construcciones deben evitarse.
Comentarios, sugerencias, ideas...
© Beatriz Fuentes Arenaz, 1996-1997