Розділ №13. Підсумковий тест

  Оновл. 28 Вер 2021  | 

 890

Ще один розділ позаду. Пора закріпити пройдений матеріал.

Теорія

Шаблони дозволяють написати одну версію функції або класу, яка працюватиме з різними типами даних. Функція або клас, реалізована через шаблон, з фактичним (одним) типом даних називається екземпляром.

Всі шаблони функцій або шаблони класів повинні починатися з ключового слова template і оголошення параметрів шаблону. В оголошенні параметрів шаблону вказуються параметри типу і параметри non-type.

   Параметр типу шаблону — це параметр, який відповідає за типи даних, з якими працюватиме шаблон, зазвичай його називають T, T1, T2 або іншими (одиночними) буквами (наприклад, S).

   Параметром non-type може бути змінна інтегрального типу даних (наприклад, char, bool, int, long, short), вказівник/посилання на функцію або на метод/об’єкт класу, std::nullptr_t.

Відокремлення визначення шаблонів класу від його методів по різних файлах не працює як зі звичайними класами — ви не можете помістити визначення шаблону класу в заголовковий файл, а визначення шаблонів методів цього класу в окремий .cpp-файл. Як правило, краще все зберігати в заголовку з визначеннями шаблонів методів під визначенням шаблону класу.

Явна спеціалізація шаблону використовується для визначення реалізації, яка відрізняється від загальної, функції або класу при роботі з певним типом даних. Якщо всі параметри спеціалізації шаблону явно визначені, то це повна спеціалізація. Класи також підтримують часткову спеціалізацію, при якій не всі параметри шаблону повинні бути явно визначені. У C++14 часткова спеціалізація шаблонів функцій заборонена.

Багато класів зі Стандартної бібліотеки C++ (наприклад, std::array та std::vector) використовують шаблони. Шаблони часто застосовуються для реалізації контейнерних класів, які можна один раз написати і використовувати з будь-якими типами даних.

Тест


Завдання №1

Припустимо, що нам потрібно передавати дані парами. Реалізуйте шаблон класу Pair1, який дозволяє користувачеві передавати дані одного типу парами. Наступний код:

Повинен видавати наступний результат:

Pair: 6 9
Pair: 3.4 7.8

Відповідь №1

Завдання №2

Реалізуйте клас Pair, який дозволяє користувачеві використовувати різні типи даних в переданих парах. Наступний код:

Повинен видавати наступний результат:

Pair: 6 7.8
Pair: 3.4 5

Підказка: Для визначення шаблону з використанням двох різних типів, просто розділіть параметри типу шаблону комою.

Відповідь №2

Завдання №3

Напишіть шаблон класу StringValuePair, в якому перше значення завжди типу string, а друге може бути будь-якого типу. Цей шаблон класу повинен наслідувати частково спеціалізований клас Pair (в якому перший параметр типу std::string, а другий — «будь-який тип даних»). Наступний код:

Повинен видавати наступний результат:

Pair: Amazing 7

Підказка: При виклику конструктора класу Pair з конструктора класу StringValuePair, не забудьте вказати, що параметри відносяться до класу Pair.

Відповідь №3

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (37 оцінок, середня: 4,95 з 5)
Завантаження...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *