- •1. Оголошення функцій користувача
- •2. Опис функції користувача
- •3. Виклик функцій користувача
- •Самостійна робота. Звернення до даних за допомогою посилань
- •Практична робота №1. Функції користувача
- •Методичні вказівки
- •Лабораторна робота №6. Функції користувача
- •Теоретичні відомості
- •Семінарське заняття №2. Організація програм
- •Лекція 8. Рекурсивні функцій. Перевантаження функцій
- •1. Рекурсивні функції
- •2. Перевантаження функцій.
- •Самостійна робота Функція main(). Розбір параметрів рядка.
- •Лекція 9. Вбудовані функції. Шаблони функцій
- •1. Шаблони функцій.
- •2. Вбудовані функції.
- •Самостійна робота. Класи пам’яті
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура заняття:
- •Оголошення функцій користувача______________________________
- •Виклик функцій користувача___________________________________
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура заняття
- •Оголошення функцій користувача_____________________________________________
- •Виклик функцій користувача_________________________________________________
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Забезпечення заняття:
- •Зміст і хід заняття:
- •Оголошення функцій користувача ______________________________
- •Виклик функцій користувача___________________________________
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» Основи програмування та алгоритмічні мови
- •Структура семінарського заняття Питання, що виносяться на семінар
- •Структура заняття:
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура самостійної роботи
- •Питання і задачі для самостійної роботи
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура заняття:
- •Державний вищий навчальний заклад «Чернівецький політехнічний коледж» «Основи програмування та алгоритмічні мови»
- •Структура самостійної роботи
- •Питання і задачі для самостійної роботи
Лекція 9. Вбудовані функції. Шаблони функцій
1. Шаблони функцій.
Перевантаження функцій, яке ми розглядали на попередній парі, часто буває корисним, але не завжди зручним. Як видно, один і той самий програмний код довелося записувати окремо для змінних символьного типу, а потім для цілих чисел. У мові C++ є змога уникнути таке дублювання за допомогою шаблонів. Шаблон функції - це опис функції, яка залежить від даних довільного типу. Крім того, така функція може повертати в основну програму результат довільного типу. Тобто користувач створює сигнатуру й описує функцію з аргументами деякого загального типу. Під час виклику такої функції компілятор автоматично проаналізує тип фактичних аргументів, згенерує для них програмний код і виконає відповідні дії. Це називається неявним створенням екземпляра шаблона. Такий підхід у програмуванні називається узагальненим програмуванням, оскільки він дає змогу створити функцію узагальненого типу. Сигнатуру шаблону функції можна описати так:
template <class <назва узагальненого типу>>
<тип функції> <назва функції>(<список формальних параметрів>);
У списку формальних параметрів замість стандартних конкретних типів даних зазначають назву узагальненого типу. Правила для описування шаблона функції такі самі, як і для функції користувача.
Зауваження. У стандарті ISO/ANSI замість ключового слова class прийнято записувати typename.
Якщо для деякого типу даних функцію необхідно описати окремо, то створюють явну специфікацію функції. Тоді у списках формальних параметрів шаблона зазначають конкретні типи аргументів.
Приклад. Переробимо програму ,з попереднього заняття, для упорядкування трьох введених даних заздалегідь невідомого типу, використовуючи шаблони.
#include <iostream.h>
#include <conio.h>
// Оголошення шаблона функції
template <class Mytype>
void Sort(Mytype n1, Mytype n2, Mytype n3);
void main()
{
clrscr();
int i1,i2, iЗ, k;
char c1, c2, c3;
cout <<” Введіть 1 для впорядкування символів, 2 - чисел\n"; сіп >> к;
if(k==1)
{
cout << "Уведіть три символи";
сіn >> с1 >> с2 >> с3;
Sort (c1, с2, сЗ);
}
if (k == 2)
{
cout<< "Уведіть три числа"; сіn >> i1 >> i2 >> i3;
Sort (i1,i2,iЗ);
}
getch();
}
template <class Mytype> // Опис шаблона функції
void Sort(Mytype n1, Mytype n2, Mytype n3)
{
Mytype c;
if (n1> n2) {c = n1; n1 =n2; n2 = c;}
if (n2 > n3) {c = n2; n2 = n3; n3 = c;}
if (n1 > n2) {c = n1; n1 =n2; n2 = c;}
cout<< n1 << "\t" << n2 << "\t" << n3; ,
2. Вбудовані функції.
Під час виконання програми генеруються коди для всіх функцій користувача. Коли відбувається звертання до тієї чи іншої функції, здійснюється виклик відповідного коду. Якщо до деякої функції звертаються багато разів, то робота програми сповільнюється. Щоб цього уникнути, можна використовувати так звані вбудовані функції. Коди таких функцій вставляються компілятором у кожну точку виклику в основному коді. Це вимагає додаткового обсягу оперативної пам'яті, проте прискорює процес виконання програми. Щоб створити вбудовану функцію, потрібно до її оголошення додати ключове слово inline.
Приклад
. Використовуючи
вбудовані функції, скласти програму
для обчислення добутку
Використання функції тут має ілюстративний характер.
#include <iostream.h> // Вбудовані функції
#define N 10
inline float dob(int a);
void main()
{
float D;
for(intk = 1; k<=N; k++) D = dob(k);
cout << "Добуток дорівнює = " << D;
//--------------------------------------------------
float dob(int a)
{
static float d = 1;
d = d*(5*a + 2)/(a-15);
return d;
}
Виконавши програму, одержимо значення добутку 28380,5
