1.2 Визначення, оголошення та виклик функції

 

Функція — це логічно самостійна частина програми, котрою можуть передаватися параметри і яка може повертати значення. Кожна функція повинна мати ім’я для виклику функції. Ім’я одної з функцій — main( ) — має бути присутнім у кожній програмі, і воно зарезервоване.

При роботі з локальними змінними інформаційний зв’язок є єдиним видом міжмодульного зв’язку. З використанням функцій у мові С++ пов’язані три поняття: визначення функції; оголошення функції; виклик.

Визначенням функції називається код, який описує те, що робить функція. Визначення функції потрібно проводити за такою схемою:

<тип вертаного значення> <ім’я функції> (<список параметрів>)

{

<тип> <внутрішні змінні>;

<оператори;

[return(вираз);]

}

Перед першою фігурною дужкою стоїть заголовок визначення функції, між фігурними дужками міститься тіло визначення функції. Тіло функції — це складовий оператор, що містить операто-ри, які визначають дії функції. Синтаксис мови С++ забороняє всередині визначення функції поміщати визначення ще однієї функції. Тексти всіх функцій повинні бути записані послідовно, один за іншим.

void fun (int х, float у) // заголовок функції

{  // початок тіла функції

...

}  // кінець тіла функції


Тип вертаного функцією значення вказує тип даних результату, що повертається із функції оператору її виклику. В С, якщо тип значення, що повертається функцією, не заданий, то функція за замовчуванням повертає значення int. В С++ необхідно явно оголошувати тип значення, що повертається функціями. Якщо функція не вертає значення, то її тип повинен бути вказаний як void.

Ім’я функції формується за правилами написання ідентифікатора. Потрібно пам’ятати, що синтаксис мови С++ чутливий до регістра символів, тому

int Fun( )

int fun( )

int FUN( )

відносяться до заголовків трьох різних функцій.

Список параметрів — інакше його називають списком формальних параметрів — розділений комами список змінних, які приймають значення в момент активізації функції під час її виклику. Як об’єкти списку можуть використовуватися прості змінні, масиви, вказівники, а також типи, що визначаються користувачем. Список параметрів може бути відсутнім, тоді список параметрів задається як void. Список параметрів береться в круглі дужки, після яких точка з комою не ставиться. С++ відрізняється від С способом завдання порожнього списку параметрів. У С порожній список параметрів означає, що перевірка аргументів відсутня, при виклику функції може бути переданий будь-який аргумент. У С++ це означає відсутність аргументів, наступні два оголошення еквівалентні.

Наприклад,

int fun ( );

int fun (void);


Усі об’єкти списку мають бути описані відповідними типами безпосередньо в списку параметрів перед відповідним елементом списку.

float Sum (float v, int d)

Потім записується складний оператор, у якому описуються змінні, що беруть участь у розрахунках усередині функції і за необхідності оператор повернення значення return. Оператор return може повертати в точку виклику функції лише одне значення, яке може бути виразом, змінною, константою чи вказівником. Крім передачі значень оператор return завершує виконання функції і передає керування наступному оператору викличної функції, навіть у тому разі, якщо він не є останнім. Коли функція не повертає ніякого значення, то вираз в операторі відсутній, у цьому випадку оператор return можна опустити.

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

<ім’я функції> (<список аргументів>);

Аргументи повинні бути попередньо описані. У списку аргументів вони знаходяться у тій самій послідовності, що й у списку параметрів функції. Аргументи передаються з викличної функції в функцію, що викликається, за значенням, тобто обчислюється значення кожного виразу, що представляє аргумент, і це значення використовується в тілі функції замість відповідного формального параметра.

Аргументи можуть бути константами, простими змінними, масивами, вказівниками. Безпосередньо в момент активізації функції відбувається формування стека передаваних у функцію значень, в якому довжина кожного значення визначається типом аргументу, що передається. Виняток становлять вказівники, при їх використанні відбувається не передавання значень, а переад-ресація параметрів функції за конкретними адресами пам’яті.

Оголошення функції — це оператор, що включає в себе тип вертаного значення, ім’я функції та її параметри. Цей оператор закінчується крапкою з комою. Мова С++ вимагає, щоб оголошення функції передувало її визначенню або першому використанню в програмі. Таке оголошення називається прототипом функції. Прототип функції вказує компілятору тип даних, що повертаються функцією, кількість параметрів, яку чекає функція, тип параметрів і очікуваний порядок їх слідування. Компілятор використовує прототип функції для перевірки правильності викликів функції. Прототип функції має вигляд:

<тип вертаного значення> <ім’я функції> (<список аргументів>);

Наприклад, int sum (int, int, int);

Цей прототип вказує, що sum має три аргументи типу int і повертає результат типу int.

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

int f(float а, float b)

main ( )

{ float a1, int b1;

 t = f(a1, b1);

 . . . }

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

Прототип функції, розміщений поза описом якоїсь функції, відноситься до всіх викликів даної функції, які виникають після цього прототипу в даному файлі. Прототип функції, розміщений всередині опису певної функції, відноситься лише до викликів усередині цієї функції.

Другим способом оголошення функції перед використанням є поміщення прототипів функцій у заголовний файл (файл з роз-ширенням .h), який підключається директивою #include до тексту програми.

Списки аргументів і параметрів можуть містити невизначену кількість об’єктів. У цьому разі у списку параметрів після останнього ставляться крапки. Якщо у списку параметрів вказані тільки крапки, то список може бути порожнім.

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

Наприклад, визначена користувачем функція sum( ) використовується для розрахунку суми ряду. Ця сума вертається з допо-могою оператора return у функцію main( ) і виводиться на друк.

// Підрахунок суми ряду

#include<iostream.h>

int sum(int, int, int); // прототип функції

main()

{ int nach, kon, shag;

 cout << "\n Введіть початкове значення члена ряду: ";

 cin >> nach;

 cout << "\n Введіть кінцеве значення члена ряду: ";

 cin >> kon;

 cout << "\n Введіть крок зміни члена ряду: ";

 cin >> shag;

 cout << "\n Сума ряду дорівнює " << sum (nach, kon, shag);

 return 0;

}

// Визначення функції sum

int sum (int nachr, int konr, int shagr)

{ int i, sumr = 0;

 for(i = nachr; i< = konr; i+ = shagr)

 sumr+ = i;

 return (sumr);

}


Информация о работе «Розробка програм мовою С++»
Раздел: Информатика, программирование
Количество знаков с пробелами: 42425
Количество таблиц: 0
Количество изображений: 17

Похожие работы

Скачать
29682
0
0

... системах наукової класифікації. Однак перш ніж зануритися в об’єктно-орієнтовану розробку, давайте розглянемо деякі з властивостей, загальні для класу "об'єктів". Абстракція Ціль об'єктно-орієнтованого програмування полягає в тому, щоб побачити в задачі абстракції об'єктів реального світу. Що за реальні об'єкти малися на увазі? Буквально будь-які, аби вони давали представлення про функці ...

Скачать
27398
0
2

... процесором, тільки коли він працює в приміщенням режимі. Метою виконання даної курсової роботи є отримання практичних навичок роботи програмування мовою асемблера. Підсумком виконання курсової роботи є розробка алгоритму контролю на парність масиву даних, що зберігається в деякій області пам'яті і програми на мові асемблера, який реалізує даний алгоритм. 1. Загальний розділ Надійність ...

Скачать
13575
0
8

... x запишеться у вигляді наступної функції цей запис представляє собою приклад програми на мові Lisp. В даному курсовому проекті на мови Lisp розроблено програму Sierpins, яка реалізує побудову рекурсивних кривих Серінського. На початку програми встановлюється значення змінної *VMode*‚ яка керує установкою відео режиму, і за замовчуванням встановлена в значення 18. Ця установка відповідає ...

Скачать
28806
1
17

... сть у користуванні та невеликі розміри виконавчого файлу.. Створена нами програма проста та інтуїтивно зрозуміла і легка у користуванні. У пояснювальній записці вповні розглянута проблема пошуку коренів нелінійних рівнянь, наведені необхідні формули та теореми. Крім того, побудовані блок-схеми алгоритмів основних функцій відповідають діючим стандартам і вимогам. Отже, можемо зробити висновок, ...

0 комментариев


Наверх