Розглянемо варіант організації власної бібліотеки, коли кожна бібліотечна функція у своєму окремному програмному файлі записана в SUBPROG (рис. 3). Ім’я файлу і ім’я записаної в нього функції послідовно одна за одниною «з точки зору компілятора» ніяк не пов’язані, але для зручності програміста їх імена повинні співпадати або бути близькими по напису.
Розширення цих файлів -.cpp, як й в інших програмах С++. Наприклад, функція fact записана у файл SUBPROG\fact.cpp.
Файли типу roll (список) є за призначенням аналогами заголовочих файлів компілятора та містять прототипи відповідних функцій, константи і так далі. Крім того, у них включені директиви на включення у програму функцій, що описані.
Усі бібліотечні функції доцільно поділити на групи:
• Функції, що найчастіше використовуються у програмах, файл roll.h,
• Функції текстової графіки, файл roll_txt.h,
• Функції точкової графіки, файл roll_gr.h,
• Інші функції, що використовуються порівняно рідко, спеціалізовані й т.п.
Вміст списку SUBPROG\roll.h у наступній програмі файлу SUBPROG\roll.h.
|
|
У файлі rull.h розміщені глобальні змінні, котрі об’являються поза будь-якої функції та області дії котрих розповсюджується на усю програму, включаючи функції-підпрограми. У нашому випадку ідентифікатори i, j, k, l, m, n, num пропонуються використовувати для цілих чисел. Глобальна змінна mn об’явлена адресно для певної функції.
Введенні глобальні константи – змінні, які оснащені атрибутом const й тому ініціалізовані безпосередньо при об’яві (PI, C, C_). Такі константи змінювати до кінця програми неможливо.
Заголовочні файли оформлюються наступними директивами препроцесора:
#ifndef ROLL
#define ROLL
………………
#endif
Таке сполучення директив запобігає повторні включення директив-компонентів, що істотно для великих програм при множині заголовних файлів. Ім’я (у даному випадку ROLL) можна вибирати будь-яке, але не слід використовувати його ще раз в будь-якій якості у своїх програмах.
Застосуємо для розрахунку алгебраїчних сполук (перестановки, розміщення Amn, поєднання Cmn із m елементів по n) перетворену у бібліотечну функцію fact, записану у файл SUBPROG\fact.cpp, з прототипом double fact(int), який об’явлений у файлі SUBPROG\roll.h.
AMN=m(m-1)(m-2)…(m-(n-1))=m!/(m-n)!
Cmn=m!/n!/(m-n)!
Оглядові запитання
1. З яких двох частин складаються бібліотечні функцій, що вбудовані в компілятор С++?
2. На що вказує прототип функції?
3. Як виглядають директиви препроцесору поперед функції main?
4. Що визначає функція main?
5. Що таке функція-підпрограма? Для чого вона застосовується?
6. Яку роль грає прототип функції?
7. З чого складається опис функції?
8. Чи ставиться після фігурних дужок, які оточують тіло функції, крапка з комою?
9. Опішити деякі особливості функції-підпрограми?
10. Як перетворити підпрограму у функцію?
11. Що таке.cpp?
12. На які групи доцільно поділити бібліотечні функції?
13. Що таке глобальні змінні та константи?