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

2.2.4. Введення нового типу даних

Попри те, що для виконання приблизних підрахунків розглянута вище програма перетворення галонів у літри цілком придатна, проте для отримання дещо точніших результатів її необхідно переробити. Як зазначено вище, за допомогою цілочисельних типів даних неможливо представити значення з дробовою частиною. Для них потрібно використовувати один з типів даних з плинною крапкою, наприклад double (подвійної точності). Дані цього типу зазвичай знаходяться в діапазоні 1,7Е-3081,7Е+308. Операції, що виконуються над числами з плинною крапкою, зберігають будь-яку дробову частину результату і, отже, забезпечують точніше перетворення.

У наведеному нижче коді програми перетворення галонів у літри використовуються для значення з плинною крапкою.

Код програми 2.5. Демонстрація перетворення галонів у літри за допомогою чисел з плинною крапкою

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

int main()

{

double gallons, liters;

cout << "Введіть кількість галонів: ";

cin >> gallons; // Введення даних від користувача.

liters = gallons * 3.7854; // Перетворення в літри.

cout << "Літрів: " << liters;

getch(); return 0;

}

Для отримання цього варіанта програми в її попередню версію було внесено дві зміни. По-перше, змінні gallons і liters оголошені цього разу з використанням типу double. По-друге, коефіцієнт перетворення заданий у вигляді числа 3.7854, що дає змогу отримати точніші результати. Якщо С++-компілятор потрапляє на число, що містить десяткову крапку, він автоматично сприймає його як константу з плинною крапкою. Зверніть також увагу на те, що настанови cout і cin залишилися здебільшого такими, як у попередньому варіанті програми, у якій використовувалися змінні типу int. Це дуже важливий момент: С++-система введення-виведення автоматично налаштовується на тип даних, який було вказано у програмі.

Скомпілюйте і виконайте цю програму. На пропозицію вказати кількість галонів введіть число 1. Як результат виконання програма повинна відобразити на екрані 3,7854 літра.

Отже, підсумуємо найважливіше з уже пройденого матеріалу.

1. Кожна С++-програма повинна мати функцію main(), яка означає початок виконання програми.

2. Всі змінні мають бути оголошені до їх використання.

3. Мова програмування C++ підтримує різні типи даних, в т.ч. цілочисельні та з плинною крапкою.

4. Оператор виведення даних позначається символом "<<", а під час використання в настанові cout він забезпечує відображення інформації на екрані монітора.

5. Оператор введення даних позначається символом ">>", а під час використання в настанові cin він зчитує інформацію з клавіатури.

6. Виконання програми завершується із закінченням функції main().

2.3. Функції – "будівельні блоки" С++-програми

2.3.1. Основні поняття про функції

Будь-яка С++-програма складається з "будівельних блоків", що називаються функціями. Функція – це підпрограма, яка містить одну або декілька С++-настанов і виконує одну або декілька задач. Хороший стиль програмування мовою C++ передбачає, що кожна функція виконує тільки одну задачу.

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

Функції – це "будівельні блоки" С++-програми.

У мові програмування C++ жодна функція не може бути вбудована в іншу. На відміну від таких мов програмування, як Pascal, Modula-2 і деяких інших, які дають змогу використовувати вкладені функції, у мові програмування C++ всі функції розглядаються як окремі компоненти1.

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

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

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

Код програми 2.6. Демонстрація структури програми, що містить дві функції: main() і fun_c()

#include <iostream> // Для потокового введення-виведення

using namespace std; // Використання стандартного простору імен

void fun_c(); // Прототип функції fun_c()

int main()

{

cout << "У функції main().";

fun_c(); // Викликаємо функцію fun_c().

cout << "Знову у функції main()."

getch(); return 0;

}

void fun_c()

{

cout << " У функції fun_c(). ";

}

Програма працює таким чином. Спочатку викликається функція main() і виконується її перша cout-настанова. Потім з функції main() викликається функція fun_c(). Звернемо Вашу увагу на те, як цей виклик реалізується у програмі: вказується ім'я функції fun_c, за яким стоїть пара круглих дужок і крапка з комою. Виклик будь-якої функції є С++-настановою і тому повинен завершуватися крапкою з комою. Потім функція fun_c() виконує свою єдину cout-настанову і передає керування назад функції main(), причому тому рядку коду програми, який розташований безпосередньо за викликом функції. Нарешті, функція main() виконує свою другу cout-настанову, яка завершує всю програму. Отже, на екрані ми повинні побачити такі результати:

У функції main(). У функції fun_c(). Знову у функції main().

У цій програмі необхідно розглянути таку настанову:

void fun_c(); // Прототип функції fun_c()

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

Як зазначено в коментарі, це – прототип функції fun_c(). Хоча детальніше прототипи буде розглянуто нижче, все ж таки без коротких пояснень тут не обійтися. Прототип функції оголошує функцію до її визначення. Прототип дає змогу компіляторові дізнатися тип значення, що повертається цією функцією, а також кількість і тип параметрів, які вона може мати. Компіляторові потрібно знати цю інформацію до першого виклику функції. Тому прототип розташовується ще до функції main(). Єдиною функцією, яка не вимагає прототипу, є main(), оскільки вона є вбудованою у мові програмування C++.

Як бачимо, функція fun_c() не містить настанови return. Ключове слово void, яке передує як прототипу, так і визначенню функції fun_c(), формально заявляє про те, що функція fun_c() не повертає ніякого значення. У мові програмування C++ функції, які не повертають значень, оголошуються з використанням ключового слова void.

2.3.2. Загальний формат С++-функцій

У попередніх прикладах було показано конкретний тип функції. Проте всі С++-функції мають такий загальний формат:

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

{

.

. // тіло методу

.

}

Розглянемо детально всі елементи, з яких складається функція.

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

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

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