Ссылки
Ссылка – это еще одно имя переменной. Если имеется какая-либо переменная, например
Complex x;
то можно определить ссылку на переменную x как
Complex y = x;
и тогда x и y обозначают одну и ту же величину. Если выполнены операторы
x.real = 1; x.imaginary = 2;
то y.real равно 1 и y.imaginary равно 2. Фактически, ссылка – это адрес переменной (поэтому при определении ссылки используется символ -- знак операции взятия адреса), и в этом смысле она сходна с указателем, однако у ссылок есть свои особенности.
Во-первых, определяя переменную типа ссылки, ее необходимо инициализировать, указав, на какую переменную она ссылается. Нельзя определить ссылку
int xref;
можно только
int xref = x;
Во-вторых, нельзя переопределить ссылку, т.е. изменить на какой объект она ссылается. Если после определения ссылки xref мы выполним присваивание
xref = y;
то выполнится присваивание значения переменной y той переменной, на которую ссылается xref. Ссылка xref по-прежнему будет ссылаться на x. В результате выполнения следующего фрагмента программы:
int x = 10; int y = 20; int xref = x; xref = y; x += 2; cout "x = " x endl; cout "y = " y endl; cout "xref = " xref endl;
будет выведено:
x = 22 y = 20 xref = 22
В-третьих, синтаксически обращение к ссылке аналогично обращению к переменной. Если для обращения к атрибуту объекта, на который ссылается указатель, применяется операция -, то для подобной же операции со ссылкой применяется точка ".".
Complex a; Complex* aptr = a; Complex aref = a; aptr-real = 1; aref.imaginary = 2;
Как и указатель, ссылка сама по себе не имеет значения.Ссылка должна на что-то ссылаться, тогда как указатель должен на что-то указывать.