
- •Лабораторна робота №5 Функції Структури, об’єднання та типи означені програмістом
- •Теоретичні відомості
- •Синтаксис функцій
- •Прототипи функцій
- •Локальні змінні в функціях
- •Inline (підставні) функції
- •Void-функції
- •Рекурсивні функції
- •Перевантаження функцій
- •Виклик функцій
- •Передача параметрів та повернення результату
- •Структури, об’єднання, бітові поля
- •Структури
- •Доступ до компонентів структур:
- •Присвоювання структур
- •Вказівники на структури
- •Масиви і структури в структурах
- •Бітові поля
- •Об’єднання
- •Завдання
- •Функції
- •Структури, об’єднання та типи означені програмістом
Прототипи функцій
C++ також підтримує попередню декларацію функцій, яка називається прототипуванням функцій. Попередня декларація дозволяє перераховувати список функцій на початку програми. Такий спосіб зручний, бо повідомляє компілятору заздалегідь, які функції використовуються в програмі (назви, типи величин, які вони повертають, і список параметрів). Після того можна розташовувати реалізацію функцій в будь-якому порядку і не хвилюватися через помилки компіляції, які відбуваються, коли функція зустрічається перед її описом її реалізації. Синтаксис для прототипування:
тип_результату ім’я_функції(список_параметрів);
Крапка з комою в кінці необхідна для прототипу, але не потрібна для реалізації функції.
Локальні змінні в функціях
В будь-якій функції можна оголосити локальні константи і змінні. Область дії цих констант і змінних обмежена функцією-хазяїном. Існує 2 типи локальних змінних: автоматичний, статичний. Система створює автоматичні змінні, коли функція-хазяїн починає виконуватися. Аналогічно, коли функція-хазяїн завершує роботу, система знищує ці змінні. На відміну від автоматичних, статичні змінні зберігають свої значення між викликами функції. Ця особливість дозволяє в функціях використовувати значення, обчислені при попередньому виклику. Щоб оголосити статистичну локальну змінну потрібно написати ключове слово static перед типом змінної. Можна присвоїти початкове значення статичній змінній. Синтаксис для оголошення статистичної змінної:
static тип_змінної ім’я_змінної [=початкове_значення]
Inline (підставні) функції
Підставні функції допомагають прискорювати програму. У випадку функцій з єдиним оператором, які часто викликаються іншими функціями, ви можете прискорити виконання програми (і зменшити її розмір), оголошуючи цю функцію як inline-функцію. Компілятор замінює виклик будь-якої inline-функції копією тіла визначення, а параметри функції – аргументами. Синтаксис для inline-функцій:
inline тип_результату ім’я_функції(список_параметрів)
{
return вираз;
}
Inline-функція повинна мати один оператор return. Приклад inline-функції:
inline long square(int nNum)
{
return nNum * nNum;
}
main()
{
int N=5;
cout << square(N) << endl;
return 0;
}
Void-функції
В C++ void-функції відіграють ту ж роль, що і процедури на інших мовах програмування. Щоб вказати, що функція не повертає значення (тобто діє як процедура на мовах Pascal, Basic), C++ використовує спеціальний тип void. Отже, використавши оператор return, можна тільки вийти з void-функції. Він не є обов’язковим для даної функції.
Рекурсивні функції
Рекурсивні функції — це функції спеціального виду, які викликають самі себе до тих пір поки не отримують нарешті результат. Послідовні рекурсивні виклики повинні передавати різні аргументи і повинні досягнути границі або умови, при якій функція завершує викликати себе. Ці два простих правила не дають рекурсивній функції зациклюватись. Концептуально – рекурсія це форма повторення, яка формально не використовує цикл.
Перевантаження функцій
C++ дозволяється використовувати функції з однаковим іменем (назвою), щоб оголосити і використовувати різні версії функцій. Як правило, такі функції виконують однакові дії, але виводять дані різного типу. При оголошенні перевантажених функцій ви повинні дотримуватись таких правил:
Кожна версія перевантажених функції повинна мати унікальну сигнатуру функції. Сигнатура функції не включає тип величини, яку функція повертає, але вона включає послідовність параметрів, які мають різні типи даних.
Якщо функція має параметри з аргументами за замовчуванням, компілятор не включає ці параметри, як частину сигнатури функції.
Приклади перевантажених функцій наведено нижче:
#include <iostream.h>
int f(int a, int b, int c) { return a+b+c;}
float f(float a, float b, float c) { return a+b+c;}
main()
{
int x=1, y=2, z=3;
cout << f(x,y,z) << endl; //Результат: 6
float fx = 1.1, fy = 2.36, fz = 3;
cout << f(fx,fy,fz)<< endl; // Результат: 6.46
}