Студопедия — Ссылочный тип данных
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Ссылочный тип данных






Ссылочный тип (ссылки) иногда называют псевдонимом или синонимом, и служат он для присвоения объекту дополнительного имени. Ссылку можно рассматривать как константный указатель. Ссылка связывается с конкретным объектом в момент ее создания и в дальнейшем не может быть изменена, т.е. не может быть перенаправлена на другой объект, подобно обычному указателю.

Ссылка позволяет косвенно манипулировать объектом, точно так же, как это делается с помощью указателя. Однако эта косвенная манипуляция не требует специального синтаксиса (операции разыменования «*»), необходимого для указателей.

Подводя итог вышесказанному, можно отметить, что ссылку можно рассматривать как альтернативное имя объекта, а также как безопасный вариант указателя.

Ссылки имеют три особенности, отличающие их от указателей:

- при объявлении ссылка обязательно инициализируется, т.е. должна быть направлена на уже существующий объект,

- ссылка всегда указывает на один и тот же объект,

- при обращении к объекту по ссылке не требуется указывать операцию разыменования (*), т.к. он выполняется автоматически.

Создание ссылки похоже на создание обычной переменной – тип, имя, инициализатор. Но справа от типа надо поставить символ &.

Пример 15.

int i; //целая переменная

int &ref = i; //определение ссылки на переменную i

int &ref1; //ошибка, ссылка должна быть инициализирована

 

После этого можно пользоваться ссылкой ref так же, как самой переменной i:

i=8; //”прямой” доступ к i

ref = 8; // “косвенный” доступ к i через ссылку

 

При работе со ссылками необходимо учитывать следующее:

- ссылка не может существовать сама по себе – она обязательно связана с какой-либо переменной,

- у ссылки нет своего адреса – если взять адрес ссылки, то получим адрес связанной с ней переменной,

- все, что мы можем сделать со ссылкой – это создать ее.

Ссылку нельзя уничтожить или перенаправить на другую переменную. Она уничтожается автоматически при выходе из блока, в котором была объявлена. Все операции со ссылками реально воздействуют на адресуемые ими объекты. В том числе и операция взятия адреса.

Пример 16.

int val = 1024;

int &refVal = val; //ссылка на val

refVal+=2; //val=val+2

int ii= refVal; //ii=val

//устанавливает указатель pi на переменную val

int *pi=&refVal;

Если несколько ссылок определяются в одной инструкции через запятую, перед каждой ссылкой должен стоять &

int &rval=val1, &rval2=val2;

Если указателю присвоить нулевое значение, это означает, что указатель не установлен (не указывает ни на один объект), если же нулевое значение присвоить ссылке, это будет означать, что ссылка связана с переменной, значение которой равно 0.

Пример 17.

int *pi=0; //pi не указывает ни на какой объект

const int &ri=0;

 

означает примерно следующее:

 

int temp=0;

const int &ri = temp;

Что касается операции присваивания, то работа с указателями тоже отличается от аналогичной работы со ссылками.

Пример 18.

//работа с указателями

//определение переменных val1 и val2

int val1=1024, val2=2048;

//установка указателей

int *pi1=&val1, *pi2=&val2;

pi1=pi2;

Переменная val1, на которую указывает pi1, остается неизменной, а указатель pi1 получает значение адреса переменной val2. Таким образом, pi1 и pi2 теперь указывают на один и тот же объект val2.

Проделаем подобные операции со ссылками.

int &ri1=val1, &ri2=val2; //создание ссылок ri1 и ri2

ri1=ri2;

Операция присваивания ri1=ri2 меняет саму переменную val1 (записывает в нее значение из val2), но ссылка ri1 по-прежнему адресует val1. Пример наглядно показывает, что с точки зрения синтаксиса работа со ссылкой ничем не отличается от работы с переменной, на которую она ссылается.

Следует отметить, что механизм ссылок отсутствует в классическом С, но все современные компиляторы С++ поддерживают ссылки.

Ссылки редко используются как самостоятельные объекты, обычно они употребляются в качестве формальных параметров и возвращаемых значений функций.







Дата добавления: 2015-08-12; просмотров: 302. Нарушение авторских прав; Мы поможем в написании вашей работы!



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

Определение трудоемкости работ и затрат машинного времени На основании ведомости объемов работ по объекту и норм времени ГЭСН составляется ведомость подсчёта трудоёмкости, затрат машинного времени, потребности в конструкциях, изделиях и материалах (табл...

Гидравлический расчёт трубопроводов Пример 3.4. Вентиляционная труба d=0,1м (100 мм) имеет длину l=100 м. Определить давление, которое должен развивать вентилятор, если расход воздуха, подаваемый по трубе, . Давление на выходе . Местных сопротивлений по пути не имеется. Температура...

Виды и жанры театрализованных представлений   Проживание бронируется и оплачивается слушателями самостоятельно...

Что происходит при встрече с близнецовым пламенем   Если встреча с родственной душой может произойти достаточно спокойно – то встреча с близнецовым пламенем всегда подобна вспышке...

Реостаты и резисторы силовой цепи. Реостаты и резисторы силовой цепи. Резисторы и реостаты предназначены для ограничения тока в электрических цепях. В зависимости от назначения различают пусковые...

Studopedia.info - Студопедия - 2014-2024 год . (0.011 сек.) русская версия | украинская версия