русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шаблони класів


Дата додавання: 2014-04-22; переглядів: 936.


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

Раніше ми створили клас stack для зберігання даних типу int. Бажано було б скласти аналогічний клас для зберігання даних типу long. Але ще краще було б скласти шаблон, який давав би нам змогу зберігати дані потрібного типпу «на вибір». Використаємо з цією метою концепцію шаблонів.

//реалізація стеку у вигляді шаблону

#include<iostream>

#include<conio.h>

using namespace std;

const int MAX=100;

template<class Type>

class Stack

{private:

Type st[MAX];

int top;

public:

Stack()

{top=-1;}

 

void push(Type var)

{st[++top]=var;

}

 

Type pop()

{return st[top--];}

};

/////////////

 

 

int main()

{ Stack<float> s1;

s1.push(1111.1F);

s1.push(2222.2F);

s1.push(3333.3F);

cout<<"1: "<<s1.pop()<<endl;

cout<<"2: "<<s1.pop()<<endl;

cout<<"3: "<<s1.pop()<<endl;

///////

Stack<long> s2;

s2.push(123123123L);

s2.push(234234234L);

s2.push(345345345L);

cout<<"1: "<<s2.pop()<<endl;

cout<<"2: "<<s2.pop()<<endl;

cout<<"3: "<<s2.pop()<<endl;

getch();

return 0;

}

Програма 14.3

Шаблонний аргумент Type використовується замість фіксованого типу у всіх місцях специфікації класу, де є посилання на тип масиву st.

Шаблони класів відрізняються від шаблонів функцій способом реалізації. Для створення шаблонної функції ми викликаємо її з аргументами потрібного типу. Натомість класи реалізуються за допомогою визначення об’єкта, що використовує шаблонний аргумент:

Stack<float> s1;

Такий вираз створює об’єкт s1. Це стек, в якому зберігаються числа типу float. У всіх його методах використовується тип float.

Створення об’єкту типу Stack, що зберігає об’єкти інших типів, як у виразі

Stack<long> s1;

означає не тільки резервування іншого об’єму пам’яті для даних, але й створення нового набору методів, що оперують типом long.

 

 


<== попередня лекція | наступна лекція ==>
Шаблони функцій з кількома аргументами | Контекстнозалежне ім’я класу


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн