шаблони класів
Шаблон класу дозволяє задати клас. параметризрвані типом даних. Передача класу різних типів даних в якості параметра створює сімейство споріднених класів. Найбільш широке застосування шаблони знаходять при створенні контейнерних класів. Контейнерним називається клас. який призначений для зберігання будь-яким чином організованих даних і роботи з ними. Перевага використання шаблонів полягає в тому, що як тільки алгоритм роботи з даними визначено і налагоджений, він може застосовуватися до будь-яких типів даних без переписування коду.
Створення шаблонів класів
Розглянемо процес створення шаблону класу на прикладі двусвязного списку. Оскільки списки часто застосовуються для організації даних, зручно описати список у вигляді класу, а так як може знадобитися зберігати дані різних типів, цей клас повинен бути параметризованим.
Спочатку розглянемо непараметрізованную версію класу. Список складається з вузлів, пов'язаних між собою за допомогою покажчиків. Кожен вузол зберігає ціле число, яке є ключем списку. Опишемо допоміжний клас для представлення одного вузла списку:
Оскільки цей клас буде описаний всередині класу, що представляє список, поля для простоти доступу з зовнішнього класу зроблені доступними (public). Це дозволяє обійтися без функцій доступу і зміни полів. Назвемо клас списку List:
Розглянемо реалізацію методів класу. Метод add виділяє пам'ять під новий об'єкт типу Node і приєднує його до списку, оновлюючи покажчики на його початок і кінець:
Метод find виконує пошук вузла з заданим ключем і повертає покажчик на нього в разі успішного пошуку і 0 в разі відсутності такого вузла в списку:
Метод insert вставляє в список вузол після вузла з ключем key і повертає покажчик на вставлений вузол. Якщо такого вузла в списку немає, вставка не виконується і повертається значення 0:
Метод remove видаляє вузол з заданим ключем зі списку і повертає значення true у разі успішного видалення і false. якщо вузол з таким ключем в списку не знайдений: