Класи-шаблони, програмування на c і ​​c

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

template class ім'я_класу.
>

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

Після створення класу-шаблону можна створити конкретний екземпляр цього класу, використовуючи таку загальну форму:

ім'я_класу <тип> об'єкт;

Тут тип є ім'ям типу даних, з якими буде оперувати даний клас.

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

У наступній програмі створюється клас-шаблон stack, який реалізує стандартний стек «послід-ним увійшов - першим вийшов». Він може використовуватися для реалізації стека з довільним типом даних. У представленому тут прикладі створюються стеки символів, цілих чисел і чисел з плаваючою точкою.

// демонстрація класу-шаблону stack
#include
const int SIZE = 100;
// створення класу-шаблону stack
template class stack SType stck [SIZE];
int tos;
public:
stack ();

stack ();
void push (SType i);
SType pop ();
>;
// функція-конструктор stack
template stack:: stack ()
tos = 0;
cout <<"Stack Initialized\n";
>
/ * Функція-деструктор stack
This function is not required. It is included for illustration only. * /
template stack::

stack ()
cout <<"Stack Destroyed\n";
>
// приміщення об'єкта в стек
template void stack:: push (SType i)
if (tos == SIZE) cout <<"Stack is full. \n";
return;
>
stck [tos] = i;
tos ++;
>
// витяг об'єкта з стека
template SType stack:: pop ()
if (tos == 0) cout <<"Stack underflow.\n";
return 0;
>
tos -;
return stck [tos];
>
int main ()
stack a; // створення целочисленного стека
stack b; // створення речового стека
stack с; // створення символьного стека
int i;
// використання цілого і дійсного стеків
a.push (1);
b.push (99.3);
a.push (2);
b.push (-12.23);
cout < cout < cout < cout < // демонстрація символьного стека
for (i = 0; i<10; i++) с.push ( (char) 'A'+i);
for (i = 0; i<10; i+ + ) cout < cout <<"\n";
return 0;
>

stack а; // створення целочисленного стека
stack b; // створення речового стека
stack с; // створення символьного стека

Звернемо увагу, яким чином потрібний тип даних підставляється в кутові дужки. Изме-ня тип даних, що вказується при створенні об'єктів класу stack, одночасно змінюється тип даних, що зберігаються в стеці. Наприклад, можна створити інший стек, який зберігає покажчики на символи:

stack chrptrstck;

struct addr char name [40];
char street [40];
char city [30];
char state [3];
char zip [12];
>

Далі можна використовувати клас stack для створення стека, в якому зберігаються об'єкти типу addr:

Схожі статті