Кент Рейсдорф. 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. При каждом проходе цикла ссылка указывает на следующий элемент массива. Обратите внимание, что я избавился от оператора косвенного доступа и заменил его оператором прямого доступа. Как я уже говорил, ссылка позволяет вам работать с указателем как с объектом. В данном примере это позволило слегка сократить код и улучшить его читаемость. Новая программа по-прежнему содержит одну ошибку. Я исправлю ее в конце главы.

Web-дизайн (с) 2010 All rights reserved