Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора II Sem.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
679.94 Кб
Скачать

7.1.3. Шаблонна функція з двома узагальненими типами

У template-настанові можна визначити декілька узагальнених типів даних, використовуючи перелік елементів, розділених між собою комами. Наприклад, у наведеному нижче коді програми створюється шаблонна функція з двома узагальненими типами.

Демонстрація механізму застосування шаблонної функції з двома узагальненими типами

#include <vcl>

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

#include <conio> // Для консольного режиму роботи

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

template <class aType, class bType> void FunC(aType a, bType b)

{

cout << a << " " << b << endl;

}

int main()

{

FunC(10, "Привіт");

FunC(0.23, 10L);

getch(); return 0;

}

У наведеному прикладі у процесі виконання функції main(), коли компілятор генерує конкретні примірники функції FunC(), заповнювачі типів aType і bType замі- нюються спочатку парою типів даних int і char *, а потім парою double і long відповідно.

Необхідно пам'ятати! Створюючи шаблонну функцію, програміст дає змогу компіляторові генерувати стільки її різних версій, скільки необхідно необхідно для оброблення різних типів даних, які використовує програма для її виклику.

7.1.4. Механізм перевизначення специфікації шаблону функції

Окрім створення безпосередньо перевизначених версій узагальненої функції, можна також перевизначати саму специфікацію шаблону функції. Для цього достатньо створити ще одну версію шаблону, яка відрізнятиметься від інших переліком параметрів. Розглянемо такий приклад.

Демонстрація механізму перевизначення специфікації шаблону функції

#include <vcl>

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

#include <conio> // Для консольного режиму роботи

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

// Перша версія шаблону Fun().

template <class aType> void Fun(aType a)

{

cout << "Виконується функція Fun(aType a)" << endl;

}

// Друга версія шаблону Fun().

template <class aType, class bType> void Fun(aType a, bType b)

{

cout << "Виконується функція Fun(aType a, bType b)" << endl;

}

int main()

{

Fun(10); // Викликається функція Fun(a).

Fun(10, 20); // Викликається функція Fun(a, b).

getch(); return 0;

}

У цьому коді програми шаблон для функції Fun() перевизначається, щоб забезпечити можливість прийняття як одного, так і двох параметрів.

7.1.5. Використання стандартних параметрів у шаблонних функціях

У шаблонних функціях можна змішувати стандартні параметри з узагальненими параметрами типу. Ці параметри працюють так само, як і у будь-якій іншій функції. Розглянемо такий приклад.

Демонстрація механізму використання стандартних параметрів у шаблонній функції

#include <vcl>

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

#include <conio> // Для консольного режиму роботи

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

// Відображення даних задану кількість разів.

template<class aType> void repeat(aType data, int times)

{

int tim = times;

do {

cout << tim – times + 1 << " ==> " << data << endl;

times--;

} while(times);

cout << endl;

}

int main()

{

repeat("Це тест.", 3);

repeat(100, 5);

repeat(99.0/2, 4);

getch(); return 0;

}

Ось які результати генерує ця програма:

1 ==> Це тест.

2 ==> Це тест.

3 ==> Це тест.

1 ==> 100

2 ==> 100

3 ==> 100

4 ==> 100

5 ==> 100

1 ==> 49.5

2 ==> 49.5

3 ==> 49.5

4 ==> 49.5

У цьому коді програми функція repeat() відображає свій перший аргумент стільки раз, скільки задано її другим аргументом. Оскільки перший аргумент має узагальнений тип, то функцію repeat() можна використовувати для відображення даних будь-якого типу. Параметр times – стандартний, він передається за значенням. Змішане задавання узагальнених і стандартних параметрів, як правило, не викликає жодних проблем їх реалізації, застосовується найчастіше у програмуванні.

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