Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л6. Функц_ї в мов_ С++.doc
Скачиваний:
7
Добавлен:
21.09.2019
Размер:
102 Кб
Скачать

Необхідно дотримуватись таких правил відносно параметрів функції:

  1. Кожен параметр має мати власний тип_параметра. Не можна використовувати один і той же тип_параметра, щоб оголосити декілька параметрів (як при оголошенні змінних).

  2. Якщо функція не має параметрів, в круглих дужках після імені функції нічого не міститься.

  3. Аргумент для параметра передається копіюванням, інакше говорять “за значенням”, якщо ви не вставляєте оператор звертання за адресою ( & ) після типу параметра. Коли параметр передає копію аргументу, то функція може змінювати тільки цю копію аргументу, яку ми безпосередньо використовуємо в межах функції. Початкове ж значення аргументу залишиться незміненим. Якщо ми використовуємо оператор &, то аргумент передається “через посилання”, оголошуючи параметр посиланням на аргумент. В цьому випадку параметр стає спеціальним псевдонімом аргументу. Будь-які зміни, які функція вносить в параметр, так само вносяться і в аргумент.

  4. Параметри-посилання отримують аргументи, які є іменами змінних. Не можна використовувати вираз чи константу як аргумент, який відповідає параметру-посиланню, так як вираз не має адреси.

  5. Параметри-копії приймають аргументи, які є константами, змінними або виразами. Тип аргументу повинен відповідати типу параметру або бути узгодженим з ним. Можна використовувати перетворення типів, щоб повідомити компілятору, як привести тип аргументу до відповідного типу параметра.

Наступні приклади показують різницю між параметрами-посиланнями і параметрами-копіями.

Нехай необхідно описати функцію, в яку передаються дві змінні цілого типу (в вигляді параметрів), і у функції ці змінні обмінюються своїми значеннями. Після виконання функції, змінні мають обмінятися значеннями.

Варіант №1:

void swap (int a, int b)

{ int temp;

temp = a;

a = b;

b = temp; }

//основна програма – main:

void main()

{ int a = 10, b = 20;

swap(a,b);}

Ця програма буде виконуватись з логічною помилкою. Після виконання функції нічого не зміниться: а = 10, b = 20.

Варіант №2:

void swap (int& a, int& b)

{ int temp;

temp = a;

a = b;

b = temp; }

//основна програма – main:

void main()

{ int a = 10, b = 20;

swap(a,b);}

Після завершення цієї програми: а = 20, b = 10.

Рекурсія, перевантаження функцій,шаблони функцій (template), вбудовані функції (inline), функція main()з параметрами + Структури, об’єднання, бітові поля

Передача значень за замовчуванням. Рекурсивні функції. Шаблони.

Параметри із значеннями за замовчуванням повинні бути останніми і можуть опускатися під час виклику. Якщо один із параметрів за замовчуванням опущений, то мають опускатися і всі параметри за замовчуванням, які йдуть за ним.

за замовчуванням

d efault

int f (int a, int b=0)

void f1 (int , int = 100, char * = 0);

void abc (int abc_value = abc0); // abc0 – глобальна змінна або константа

Значення параметрів за замовчуванням можуть бути константами, глобальними змінними або виразами.

Приклад. f(100); f(a,1); f1(a); f1(a,100); f1(a,100, ’cs’)

не можна записувати  f1(a,’cs’)

Рекурсивні функції – це функції, в тілі яких міститься виклик тих самих функцій (самих себе). Це пряма рекурсія. Може бути опосередкована рекурсія f1  f2  fn  f1

Приклад. n! = 1*2*3* *n n! = n*(n-1)!

an a1 = a an = a*an-1

Приклад рекурсивної функції для n!

long fact (long n)

{ if ( n == 0 || n == 1)

return 1;

return (n*fact(n-1));

}

або

long fact (long n)

{return (n>1) ? n*fact(n-1) : 1;}

cout << fact (5);

n

fact

розгортання

I

5

120

згортання

II

4

24

III

3

6

IV

2

2

V

1

1