русс | укр

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

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


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


Створення класу зв’язних списків за допомогою шаблону


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


Розглянемо ще один приклад, в якому шаблони допомагають при створенні класів-сховищ даних. Для цього модифікуємо програму, що описує, створює і зберігає зв’язні списки. Будемо добиватися, щоб не тільки клас linklist був перероблений в шаблон, але щоб і структура link, яка реально зберігає кожен елемент даних, теж стала шаблоном.

//шаблон звязних списків

#include<iostream>

#include<conio.h>

using namespace std;

///////////

template<class TYPE>

struct link

{TYPE data;

link* next;

};

 

/////////

template<class TYPE>

class linklist

{ private:

link<TYPE>*first;

public:

linklist()

{first=NULL;}

 

void additem(TYPE d);

void display();

};

 

/////////

template<class TYPE>

void linklist<TYPE>::additem(TYPE d)

{link<TYPE>* newlink=new link<TYPE>;

newlink->data=d;

newlink->next=first;

first=newlink;

}

 

template<class TYPE>

void linklist<TYPE>::display()

{

link<TYPE>* current=first;

while(current!=NULL)

{cout<<endl<<current->data;

current=current->next;

}

}

/////////

int main()

{

linklist<double> ld;

ld.additem(101.5);

ld.additem(202.5);

ld.additem(303.7);

ld.display();

 

linklist<char>lch;

lch.additem('a');

lch.additem('b');

lch.additem('c');

lch.display();

cout<<endl;

getch();

return 0;

}

 

Програма 14.5

В main() ми визначаємо два зв’язних списки: один — для зберігання чисел типу doublr, інший — для зберігання символів (типу char). В кожен з них заносимо по три значення за допомогою методу additem() і виводимо всі значення на екран за допомогою display().

І клас linklist, і структура link використовуються шаблонним аргументом TYPE для підстановки довільного типу даних. Таким чином, не тільки linklist, але й link повинні бути саме шаблонами і починатися з рядка:

template<class TYPE>

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

Як і раніше, необхідно слідкувати за найменуванням класу (і структури) в різних частинах програми. Всередині його власної специфікації ми використовуємо тільки найменування класу (чи структури). У зовнішніх методах ми пишемо ім’я класу, а за ним — ім’я шаблонного аргументу

linklist<TYPE>

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

linklist<double> ld;

 


<== попередня лекція | наступна лекція ==>
Контекстнозалежне ім’я класу | Зберігання типів користувача


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