Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

7.4.5. Прототипи функцій

Прототип оголошує функцію до її першого використання.

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

  • тип значення, що повертається нею;

  • тип її параметрів;

  • кількість параметрів.

Прототипи дають змогу компіляторові виконати такі три важливі операції.

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

  • вони дають змогу C++ виявити неприпустимі перетворення типів аргументів, що використовуються під час виклику функції, в тип, який було вказано в оголошенні її параметрів, і повідомити про них;

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

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

type func_name(type parm_name1, type parm_name2,., type parm_nameN);

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

Щоб краще зрозуміти корисність прототипів функцій, розглянемо наведену нижче програму. Якщо Ви спробуєте її скомпілювати, то отримаєте від компілятора повідомлення про помилку, оскільки у цій програмі робиться спроба викликати функцію sqr_fun() з цілочисельним аргументом, а не з покажчиком на цілочисельне значення (згідно з прототипом функції). Помилка полягає в неприпустимості перетворення цілочисельного значення в покажчик.

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

void sqr_fun(int *izm); // прототип функції

int main()

{

int x;

x = 10;

sqr_fun(x); // *** Помилка *** -- невідповідність типів!

getch(); return 0;

}

void sqr_fun(int *izm)

{

*izm = *izm * *izm;

}

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

7.4.6. Грунтовніше про заголовки у C++-програмах

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

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

Порівняння старого і нового стилів оголошення параметрів функцій

Якщо Вам доводилося коли-небудь розбиратися в старому С-коді програми, то Ви, можливо, звернули увагу на незвичайне (з погляду сучасного програміста) оголошення параметрів функції. Цей старий стиль оголошення параметрів, який іноді називають класичним форматом, застарілий, але на нього дотепер можна натрапити у програмах раннього періоду. У мові програмування C++ (і оновленому С-коді програми) використовується нова форма оголошень параметрів функцій. Але, якщо Вам доведеться працювати із старими С-програмами і, особливо, якщо знадобиться переводити їх в С++-код, то Вам буде корисно розуміти і форму оголошення параметрів, "витриману" в старому стилі.

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

float fun(int a, int b, char ch)

{...

виглядатиме з використанням старого стилю дещо по-іншому.

float fun(а, b, ch)

int a, b;

char ch;

{...

Звернемо Вашу увагу на те, що в класичній формі після того, яка вказано ім'я типу, в переліку може знаходитися декілька параметрів. У новій формі це оголошення не допускається.

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