Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1
Кент Рейсдорф. BORLAND C++BUILDER. Страница 60
Если вы раньше работали с Си++, то могли заметить ошибку в программе. До конца этой главы вы узнаете о ней.
|Ссылка (reference) — это специальный тип указателя, который по
зволяет работать с указателем как с обычным объектом.
Ссылки, как и указатели, могут вызвать путаницу. Ссылка объявляется с помощью специального оператора ссылки. Для этого оператора используется тот же символ (&), что и для оператора взятия адреса (не беспокойтесь, компилятор знает, как их различить). Я уже говорил, что ссылка позволяет трактовать указатель как объект. Рассмотрим пример:
MyStruct* pStruct = new MyStruct; MyStruct& ref = *pStruct; ref.X = 100;
Обратите внимание, что со ссылкой используется оператор прямого доступа. Теперь можно избавиться от этих надоедливых операторов -> ! Хотя вы не будете использовать ссылки в большом количестве, они могут оказаться очень удобны, когда в них возникнет необходимость. Между тем, рассмотренный фрагмент стоит немного сжать. В реальной программе я написал бы его следующим образом:
MyStructS ref = *new MyStruct; ref.X = 100;
Это не очень наглядно, но работает точно так же, как и в первом примере. Подобные комбинированные операторы часто используются и позволяют избежать ненужной избыточности.
Давайте еще раз обратимся к примеру MAILLIST. Теперь я изменю его, введя ссылку в цикл do-while. (В действительности я буду изменять пример POINTER из листинга 3.1.) Новая программа приведена в листинге 3.2.
Листинг 3.2. REFERENC.CPP
Листинг 3.2. (продолжение)
Единственное изменение внесено в цикл do-while — объявлена ссылка \кс>в на структуру mailingListRecord. При каждом проходе цикла ссылка указывает на следующий элемент массива. Обратите внимание, что я избавился от оператора косвенного доступа и заменил его оператором прямого доступа. Как я уже говорил, ссылка позволяет вам работать с указателем как с объектом. В данном примере это позволило слегка сократить код и улучшить его читаемость. Новая программа по-прежнему содержит одну ошибку. Я исправлю ее в конце главы.