Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора 57стр.doc
Скачиваний:
54
Добавлен:
15.06.2014
Размер:
478.21 Кб
Скачать

Вопрос 1. Ссылки и ссылочные параметры.

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

Ссылочный параметр — это псевдоним соответствующего аргумента. Чтобы показать, что параметр ф-ции передан по ссылке, после типа параметра в прототипе функции ставится символ амперсанда (&); такое же обозначение используется в списке типов параметров в заголовке функции. Например, объявление

int &count

в заголовке ф-ции может читаться как <<count явл-ся ссылкой на int>>. В вызове ф-ции достаточно указать имя переменной и она будет передана по ссылке. Тогда упоминание в теле вызываемой ф-ции переменной по имени ее параметра в действительности явл-ся обращением к исходной переменной в вызывающей ф-ции и эта исходная переменная может быть изменена непосредственно вызываемой ф-цией.

В С++ можно создавать передаваемые по ссылке параметры. Для этого при объявлении функции перед парам-м став. &. При объявлении ссылки компилятор знает, что это неявный указатель, и обраб. соответств. образом. При вызове ф-и ей автоматически передаётся адрес аргумента => ф-я может модифицировать переменную.

type name(type &val);

Ограничения:

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

- нельзя создать массив ссылок;

- нельзя создать указатель на ссылку;

- ссылки на битовые поля не допускаются;

При передаче по ссылке объекта его копия не создаётся и деструктор не вызывается.

Ф-я может возвращать ссылку => такая ф-я может исп-ся в левой части оператора присв.

type &name(…);

Независимые сылки – переменные ссылочного типа как самост. переменные; НС должны быть иниц. при объявлении.

int i;

int &j = i;

Вопрос 2. Перегрузка функций.

Аргументы по умолчанию !!!

void name (char ch, int i = 45);

С++ позволяет определить несколько функций с одним и тем же именем, если эти функции имеют разные наборы параметров (по меньшей мере разные типы параметров). Эта особенность называется перегрузкой функции. Значение перегр. ф-й – позв. обесп. доступ к целому набору ф-й, исп-я общее имя. При вызове перегруженной ф-ции компилятор С++ определяет соответствующую ф-цию путем анализа кол-ва, типов и порядка следования аргументов в вызове. Перегрузка функции обычно используется для создания нескольких функций с одинаковым именем, предназначенных для выполнения сходных задач, но с разными типами данных.

// Использование перегруженных функций include<iostream.h> int square(int x) ( return x * x; } double square(double у) { return у * у;

main I

cout « "Квадрат целого числа 7 равен " « square(7) « endl

« "Квадрат числа 7.5 типа double равен « square(7.5) « endl;

return 0;

Перегруженные функции различаются с помощью их сигнатуры — ком­бинации имени функции и типов ее параметров. Компилятор кодирует иден­тификатор каждой ф-ции по числу и типу ее параметров (иногда это на­з-ся декорированием имени), чтобы иметь возможность осуществлять надежное связывание типов. Надежное связывание типов гарантирует, что вызывается надлежащая ф-ция и что аргументы согласуются с парамет­рами. Компилятор выявляет ошибки связывания и выдает сообщения о них.

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