Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Механизм передачи параметров




 

В языке С++ параметры могут передаваться функции по значению и по ссылке. При передаче параметров по значению (call-by-value) последние передаются функции как аргументы, их значения копируются в соответствующие формальные параметры функции, при этом фактические параметры не могут быть изменены в вызывающем окружении. При передаче параметров по ссылке (call-by-reference) их адреса передаются функции как аргументы, сами параметры могут изменяться в вызывающем окружении. В списке объявлений формальных параметров используются указатели для хранения адресов фактических параметров. В теле функции указатели необходимо разыменовывать. Для передачи параметров по ссылке также применяются объявления ссылок, которые передаются функции как аргументы.

 

Например:

 

определение функции / вызов функции

void swap (int i, int j) swap(a, b);

{int t = i; i = j; j = t;} a и b значениями не поменяются

void swap (int *i, int *j) swap(&a, &b);

{int t = *i; *i = *j; *j = t;} a и b поменяются значениями

void swap (int &i, int &j) swap(a, b);

{int t = i; i = j; j = t;} a и b поменяются значениями

 

 

Прототипы функций

 

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

тип имя (список_типов_формальных_параметров);

При вызове функции компилятор обеспечит строгую проверку типов и неявные преобразования типов.

 

Примеры прототипов: void swap(int&, int&);

int my_function(int p);

 

 

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

 

Формальным параметрам могут быть заданы аргументы по умолчанию (default argument), значения которых, как правило, наиболее часто встречаются при вызове функции. Значения по умолчанию могут иметь только несколько последних формальных параметров, соответствующие им фактические параметры при вызове функции не пишутся.

 

Например: определение функции

int my_function (int i, int j = 2, int k = 3)

{ return i + j + k;} // по умолчанию j = 2, k = 3

вызов функции

y = my_function (1); // вычислит: 1 + 2 + 3

y = my_function (10, 20, 30); // вычислит: 10 + 20 + 30

 

 

Встраивание функций

 

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

inline float cube(float x) // имеет внутреннюю

{return x*x*x;} // компоновку

 

Перегрузка функций

 

Перегрузка (overloading) – это применение одного имени для нескольких вариантов функции, выбор конкретного варианта определяется сигнатурой параметров:

float cube(float x) // y = cube(1.5);

{ - - - - - }

int cube(int x) // z = cube(15);

{ - - - - - }

 

 

Область видимости и классы памяти

 

Класс памяти определяет место хранения, область видимости и время существования объекта. Существует четыре класса памяти: автоматический, регистровый, внешний и статистический. Они задаются следующими модификаторами: auto, register, extern, static.

Область видимости (scope) может быть локальной, в пределах файла, пространства имен и класса. Правило области видимости определяет доступность объектов только в пределах области видимости (внутри блока), в которой они объявлены. Область видимости имеет присущую только ей номенклатуру объявлений.

Задания

 

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

1) функция принимает параметры по значению и возвращает значение;

2) функция в качестве параметров принимает указатели, в том числе и параметр адреса результата, а возвращает значение типа Void.

3) функция принимает параметры по ссылке и возвращает ссылку на тип результата.

Исходные данные представлены в следующей таблице (по вариантам):

 

Параметры Номер варианта
                   
e 0,01 0,001 0,0001 0,001 0,01 0,001 0,0001 0,001 0,0001 0,001
X min -2π     -2π π    
X max π 3π/2   π/2 π
Δ x Π/4 π/12 π/6 π/12 π/12 π/4 π/6 π/8 π/4 π/3

 

 

 

П р и м е ч а н и е. Переменная n вводится с клавиатуры.

 

Процесс суммирования прекращается, когда будет обнаружено, что очередной член ряда | h | ≤ ε.

Выбор механизма передачи параметров оформить с помощью оператора Switch.

 

Контрольные вопросы

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

2. Что такое прототип функции? Какие преимущества имеют прототипы функций?

3. С какой целью применяются аргументы по умолчанию? В чем заключается синтаксис и семантика их использования?

4. Объясните механизм передачи параметров, в чем преимущества и недостатки передачи параметров по значению и по ссылке?

5. Каким образом функции возвращают значения?

6. Что означает понятие «встроенная функция»?

7. Сформулируйте алгоритм выбора перегруженной функции.

 

 

Р а з д е л II

 

ОБРАБОТКА МАССИВОВ

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...