Створення шаблонів класів

Створення шаблонів класів.

Точно так само як створюються абстрактні функції на основі шаблонів функцій, створюються абстрактні класи на основі шаблонів класів. Шаблон класу описує клас, який, в свою чергу, описує об'єкт. Коли ви створюєте шаблон класу, компілятор зчитує цей шаблон і визначає клас З атем ви створюєте екземпляри об'єктів цього класу. Як бачите, шаблони класів визначають ще один рівень абстракції в концепції класів.

Лістинг 4. Визначення шаблону класу

Template

При створенні за шаблоном класу примірника об'єкта необхідно вказати типи даних, які будуть підставлені замість параметрів шаблону. Наприклад, для створення в програмі об'єкту класу MyClass можна використовувати наступний оператор:

CMyClass myClass (15);

Цей рядок створює об'єкт класу CMyClass. який замість абстрактного типу даних використовує цілочисельний. Якщо необхідний клас для роботи з речовими числами, то об'єкт такого класу можна створити наступним чином:

CMyClass myClass (15.75);

Розглянемо більш складний приклад. Припустимо, що необхідно створити клас, що забезпечує зберігання двох значень і містить функцію-член для порівняння цих значень. У лістингу 5 наведено ті кст ін ограмми, в якій реалізований подібний клас. Перш за все, в програмі визначається шаблон класу, названий CCompare. В цьому класі зберігаються два значення, які надаються функии-конструктору при виклику. Клас також включає звичайні конструктор і деструктор, а також функції-члени для означення меншої або більшої з значенні або перевірки їх на рівність.

Лістинг 5. - використання шаблону класу

# include

template

CCompare (Type arg1, Type arg2)

CCompare compare1 (15, 25);

CCompare compare2 (254.78, 12.983);

CCompare compare3 ( 'A', 'Z');

cout <<"THE COMPARE1 OBJECT" <

cout <<"Lowest: " <

cout <<"Highest: " <

cout <<"Equal: " <

cout <<"THE COMPARE2 OBJECT" <

cout <<"Lowest: " <

cout <<"Highest: " <

cout <<"Equal: " <

cout <<"THE COMPARE2 OBJECT" <

cout <<"Lowest: " <

cout <<"Highest: " <

cout <<"Equal: " <

Головна програма створює на основі шаблону класу три різних об'єкта один з яких оперує цілими числами, інший використовує речові числа, а третій зберігає і порівнює змінні символьного типу. Створивши зазначені три об'єкти класу CCompare. функція main () викликає функції-члени цих об'єктів з тим, щоб вивести на екран інформацію про дані, що зберігаються в кожному з трьох об'єктів.

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

Template

CMyClass (Type1 arg1, Type2 arg2)

Для створення екземпляра об'єкта класу MyClass можна використовувати, наприклад, наступний рядок:

CMyClass myClass (15, 'А');

І нарешті, слід сказати, що в якості параметрів шаблону класу, нарівні з типами-держателями місця можна використовувати і конкретні типи даних. Слід просто помістити в список параметрів певний тип даних нарівні з іншими параметрами. У лістингу 7 наведено текст невеликої програми, в якій екземпляр об'єкта створюється на основі шаблону класу, що використовує два абстрактних типу даних і один конкретний.

Лістинг 7. Використання конкретних типів даних в якості параметрів в шаблоні класу

#include

Template

Схожі статті