Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Розділ 11. Модульне програмування частина 1.docx
Скачиваний:
7
Добавлен:
20.08.2019
Размер:
213.82 Кб
Скачать

Лекція 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]