Створення шаблонів класів.
Точно так само як створюються абстрактні функції на основі шаблонів функцій, створюються абстрактні класи на основі шаблонів класів. Шаблон класу описує клас, який, в свою чергу, описує об'єкт. Коли ви створюєте шаблон класу, компілятор зчитує цей шаблон і визначає клас З атем ви створюєте екземпляри об'єктів цього класу. Як бачите, шаблони класів визначають ще один рівень абстракції в концепції класів.
Лістинг 4. Визначення шаблону класу
Template
При створенні за шаблоном класу примірника об'єкта необхідно вказати типи даних, які будуть підставлені замість параметрів шаблону. Наприклад, для створення в програмі об'єкту класу MyClass можна використовувати наступний оператор:
CMyClass
Цей рядок створює об'єкт класу CMyClass. який замість абстрактного типу даних використовує цілочисельний. Якщо необхідний клас для роботи з речовими числами, то об'єкт такого класу можна створити наступним чином:
CMyClass
Розглянемо більш складний приклад. Припустимо, що необхідно створити клас, що забезпечує зберігання двох значень і містить функцію-член для порівняння цих значень. У лістингу 5 наведено ті кст ін ограмми, в якій реалізований подібний клас. Перш за все, в програмі визначається шаблон класу, названий CCompare. В цьому класі зберігаються два значення, які надаються функии-конструктору при виклику. Клас також включає звичайні конструктор і деструктор, а також функції-члени для означення меншої або більшої з значенні або перевірки їх на рівність.
Лістинг 5. - використання шаблону класу
# include
template
CCompare (Type arg1, Type arg2)
CCompare
CCompare
CCompare
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 І нарешті, слід сказати, що в якості параметрів шаблону класу, нарівні з типами-держателями місця можна використовувати і конкретні типи даних. Слід просто помістити в список параметрів певний тип даних нарівні з іншими параметрами. У лістингу 7 наведено текст невеликої програми, в якій екземпляр об'єкта створюється на основі шаблону класу, що використовує два абстрактних типу даних і один конкретний. Лістинг 7. Використання конкретних типів даних в якості параметрів в шаблоні класу #include TemplateСхожі статті