Програмування С, С++теорія та практика (частина 2)
2.9.1 Параметризовані функції
Шаблон функції декларується за допомогою ключового слова ґешріаґе. Це слово використовується для створення шаблону (каркасу), що в загальних рисах описує призначення функції та надає опис операцій - сутність алгоритму, що може застосовуватися до даних різних типів. При цьому конкретний тип даних, над яким функція повинна виконувати операції, передаватиметься їй на етапі компіляції. Загальна форма функції-шаблону має вигляд:
Синтаксис:
їетріаїе <список_аргументів_шаблону> тип ім'я_функції(параметри)
{
// тіло функції
}
Список аргументів шаблону складається з ключового слова сіазз та ідентифікатору (-ів), що визначає його тип. Коли компілятор створюватиме конкретну версію цієї функції, він автоматично замінить цей параметр конкретним типом даних. Цей процес носить назву інстанціювання шаблону.
Зручним є створення прототипу шаблона функції у вигляді його попереднього оголошення. Таке оголошення інформує компілятор про наявність шаблону та його очікуваних параметрах, наприклад: ■Ьетр1а'Ье <с1азз Т> Vоій. £ипк(Т аггау[ ] , зігеаггау) ;
Нижче наведений приклад використання параметризованої функції 8№ар(Т& х, Т& у), що здійснює обмін значеннями між двома її параметрами:
Приклад 1.
#іпс1ийе "з'Ьгііо.Ь"
Їетр1а^е <с1азз Т> Vоій. змар(Т& х, Т& у) ; іп£ таіп()
{
іп£ а=5,Ь=10;
£1оаї с=7,гі=14; сЬаг сЬ='а',сіїЬ='А';
змар(а,Ь); // виклик для цілих аргументів ргіп'Ь£("а=%гі, Ь=%гі\п",а,Ь);
змар <£1оа^>(с,й); // виклик для £1оаї аргументів ргіп'Ь£("с=%£, гі=%£\п",с,гі);
змар <сЬаг>(сЬ,сіїЬ); // виклик для сЬаг аргументів ргіп'Ь£("сЬ=%с, сіїЬ=%с\п",сЬ,сіїЬ) ; ге^игп 0;
}
// визначення параметризованої функції ■Ьетр1а'Ье <с1азз Т> Vоій. змар(Т& х, Т& у)
{
Т ■Ьетр=х ; х=у; у=^етр;
}
Програма відкривається прототипом шаблонної функції. Аналізуючи приклад, зауважимо, що для інстанціювання шаблону застосовуються дві форми.
Конкретний тип для цього визначається компілятором автоматично, виходячи з типів параметрів у місці виклику функції (у наведеному вище прикладі це тип іпґ), або задається явним способом (у прикладі це підстановка типів /Іоаґ та сНаг).
Якби 8№ар() була звичайною функцією, то потрібною була б її реалізація. Оскільки це шаблонна функція, компілятор сам реалізуватиме код такої функції, замінивши у даному випадку тип 8м>ар на іпґ, /Іоаґ та сНаг. Таким чином можна зменшити розмір та складність програми, запропонувавши компілятору реалізацію узагальнених функцій.
Приклад 2. Функція приймає масив невизначеного типу та два цілих, обмінюючи зміст елементів масиву з індексами х та у ^етр1а^е <с1азз Т> VОій. сЬапде (Т £[ ], іп£ х, іп£ у)
{
Т ^тр=^[х];
£[х]=£[у];
£[у]=-Ьтр;
}
Коректними будуть такі виклики функцій за цим шаблоном: ДоиЬ1е аг[7]={2,3,4,5,6,7,8};
сЬапде(аг,2,3); // або сЬапде <гіоиЬ1е>(аг,2,3); сЬаг саг[5] = {'а' ,'Ь' ,'с' ,'гі.' ,'е'}; сЬапде(саг,1,4); // або сЬапде <сЬаг>(саг,1,4);
Таким чином, є можливість легко створювати нові функції, підставляючи в існуючі шаблони конкретні аргументи.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
Схожі підручники
- Бухгалтерський фінансовий облік (частина 3)
- Стан НПС та основні напрями природоохоронної політики Фінляндії управлінські, організаційні, економічні та юридичні аспекти
- РЕГІОНАЛЬНА ЕКОНОМІКА. Тексти лекцій онлайн (частина 1)
- Методичні вказівки до виконання практичного заняття на тему «Теорія ігор.»
- ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 4) онлайн
- РЕГІОНАЛЬНА ЕКОНОМІКА (частина 3)
