Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Теоретичні основиСтр 1 из 3Следующая ⇒
Нестрогим математичним визначенням поняття «функція» можна прийняти таке визначення. Функція – це закон, що визначає однозначну відповідність кожному елементу деякої множини X одного елемента деякої множини Y. У C++ функція відповідає наведеному вище математичному визначенню, а саме, – це оформлена спеціальним чином самостійна програмна одиниця, яка проектується для розв’язання конкретної задачі, перетворюючи одне або декілька значень не обов’язково того самого типу в одне значення деякого типу[1]. Крім функцій, що входять у стандартні бібліотеки, які можна підключати до розроблюваної програми, програміст має можливість розробляти і використовувати власні функції. Функція оформлюється один раз, а використовується багаторазово в різних місцях програми, виконуючи одні й ті ж самі дії над різними оброблюваними даними. Функції дозволяють структурувати програму; написання великих програм без використання функцій говорить про поганий стиль програмування. Програма не повинна залежати від особливостей реалізації функцій – функції слід писати так, щоб їх можна було переносити з одних програм в інші й створювати бібліотеки функцій. Таким чином, використання функцій дає такі дві основних переваги: 1) відокремлюється хід розв’язання від конкретної реалізації функції – немає потреби знати, як реалізована функція, потрібно тільки вміти до неї звернутися; 2) опис функції в програмі дається один раз, а використовувати її можна багаторазово. Функція визначається у відповідності з наступним форматом: Заголовок функції Розглянемо деякі особливості опису функції і звертання до неї. 1. Заголовок функції має такий формат: тип ім’я_функції (специфікація_формальних_параметрів) Тут тип – це тип значення, яке є результатом роботи функції (char, int, double і т. д.). Тип може бути не вказаним; у такому разі функція має тип int. Якщо функція не повертає ніяке значення, то її тип задається службовим словом void; ім’я_функції – довільно вибраний ідентифікатор, за допомогою якого здійснюється звертання до функції; специфікація_формальних_параметрів – це список описів формальних параметрів, кожен з яких у найпростішому випадку має такий вигляд: позначення_типу ім’я_параметру Окремі специфікації у списку розділяються комою. Список формальних параметрів може закінчуватися комою з наступними трьома крапками (...), які вказують на те, що при звертанні до функції можна вказати більше фактичних параметрів, ніж їх зазначено в специфікації_формальних_параметрів. Наприклад: double fun(double a, double b, int d) Параметри можуть мати значення за умовчанням. Значення за умовчанням задається після імені параметру і символу =; наприклад: double fun(double a, double b = 1.2, int d = 0) 2. Тіло функції – це послідовність операторів, укладена у фігурні дужки, тобто це блок (тіло функції може містити описи і визначення). Всередині тіла функції не можна визначити іншу функцію (функції не можуть бути вкладеними одна в одну). Наприклад: { 3. Змінні, типи, константи тощо, оголошені в тілі функції, називаються локальними. Ці змінні поза функцією не існують, оскільки під них виділяється пам’ять щоразу при виклику функції, а при виході з функції ці змінні знищуються[2]. 4. Формальні параметри є локальними змінними. 5. Імена локальних змінних, за винятком тих, що описані або визначені у вкладених блоках тіла функції, не можуть збігатися з іменами формальних параметрів (це є наслідком попереднього). 6. Якщо функція не має формальних параметрів, то специфікація_формальних_параметрів або відсутня, або задається службовим словом void. Дужки в заголовку вказуються в обов’язковому порядку. 7. Якщо функція повертає результат своєї роботи в точку виклику, то це виконується за допомогою оператора return вираз; Цей оператор здійснює дії, які зв’язані з завершенням роботи функції. При цьому значення наведеного в ньому виразу (або константи чи змінної) перетворюється відповідно до типу, указаного в заголовку функції (якщо це можливо). 8. Всі змінні, описані у файлі, що містить текст програми, до визначення функції, також відомі усередині функції. Ці змінні називаються глобальними. У зв’язку із загальнодоступністю глобальних змінних у складних випадках можлива ситуація, коли одна функція може змінити значення глобальної змінної «непомітно» для іншої, результатом чого стає поява помилок, які досить важко виявляються. Щоб уникнути цього, рекомендується обмежувати використання глобальних змінних. Глобальні змінні необхідні в тому випадку, коли програмісту потрібно зробити дані доступними для декількох функцій, а передача даних з однієї функції в іншу є проблематичною. 9. Імена формальних параметрів і локальних змінних можуть збігатися з різними іменами, оголошеними поза функцією. У цьому випадку в тілі функції активними будуть імена, оголошені в ній. 10. Для звертання до функції використовується вираз з операцією «круглі дужки»: позначення_функції(список_фактичних_параметрів) Тут позначення_функції – це або її ім’я, або розіменований вказівник на неї, список_фактичних_параметрів – список змінних, констант, виразів, що розділяються комами. Відповідність між фактичними і формальними параметрами встановлюється по порядку їх взаємного розміщення в списках. При виклику функції дужки вказуються завжди, навіть якщо функція не має параметрів. Приклад звертання: double z = fun(a, 1.5, 2 * n) – 0.2; 11. При звертанні до функції під формальні параметри відводиться пам’ять, після чого значення фактичних параметрів переписуються у відповідні формальні параметри з автоматичним перетворенням типу кожного з них до типу відповідного формального параметра (якщо це можливе). Далі всередені тіла функції здійснюється обробка формальних параметрів. Тому через формальні параметри передача значень з тіла функції в точку виклику неможлива, тим більш, що по закінченні роботи функції формальні параметри знищуються. 12. До першого звертання до функції повинне бути здійснене її визначення або попередній опис за допомогою прототипу, який співпадає з заголовком функції, але при цьому завершується точкою з комою. У прототипі можна не вказувати імена формальних параметрів, обмежившись тільки їхніми типами.
|