69736

Використання шаблонів класів

Домашняя работа

Информатика, кибернетика и программирование

Щоб створити за допомогою шаблона конкретний об’єкт конкретного класу (цей процес називається інстанціонуванням), при описі об’єкту після імені шаблона в кутових дужках перераховуються його аргументи...

Украинкский

2014-10-09

32.5 KB

0 чел.

Самостійне вивчення

Тема 13: Використання шаблонів класів

Щоб створити за допомогою шаблона конкретний об'єкт конкретного класу (цей процес називається інстанціонуванням), при описі об'єкту після імені шаблона в кутових дужках перераховуються його аргументи:

ім'я_шаблона <аргументи> імя_об'єкта [(параметри_конструктора)];

Аргументи повинні відповідати параметрам шаблона. Ім'я шаблона разом з аргументами можна сприймати як уточнене ім'я класу. Приклади створення об'єктів за шаблонами:

List <int> List_int;

List <double> List_double;

List <monstr> List_monstr;

Block <char, 128> buf;

Block <monstr, 100> stado;

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

template<class T = char> class String;

String<>* p;

Якщо параметром шаблона є шаблон, який має спеціалізацію, вона враховується при інстанціонуванні:

template<class T> class A {                // Початковий шаблон

int x;

};

template<class T>  class A <T*> {  // Спеціалізація шаблона

long x;

};

template <template<class U> class V> class C{

V<int> у;

V<int*> z;

};

C<A> с;

В даному прикладі V<int> всередині С<А>  використовує початковий шаблон, тому с.у.х має тип int, а V<int*> використовує спеціалізацію шаблона, тому c.z.x маєтип long.

На місці формальних параметрів, які є змінними цілого типу повинні стояти константні вирази.

Після створення об'єктів за допомогою шаблона з ними можна працювати так само, як з об'єктами звичайних класів, наприклад:

for (int і = 1; i<10; i++) List_double.add(i * 0.08);

List_double.print();

//..................................

for (int і = 1; i<10; i++) List_monstr.add(i);

Listmonstr.print();

//---------------------------------------

strcpy(buf, "Дуже важливе повідомлення");

cout << buf << endl;

Для спрощення використання шаблонів класів можна застосувати перейменування типів за допомогою

typedef:

typedef List <double> Ldbl;

Ldbl List_double;

Спеціалізація шаблонів класів

Кожна версія класу або функції, яка створюється за шаблоном, містить однаковий базовий код; змінюється тільки те, що пов'язано з параметрами шаблона. При цьому ефективність роботи версій, які створюються для різних типів даних, може сильно розрізнятися.

Якщо для якого-небудь типу даних існує більш ефективний код, можна або передбачити для цього типу спеціальну реалізацію окремих методів, або повністю перевизначити (спеціалізувати) шаблон класу. Для спеціалізації методу вимагається визначити варіант його коду, вказавши в заголовку конкретний тип даних. Наприклад, якщо заголовок узагальненого методу print шаблона List має вид

template <class Data>  void List <Data>::print():

спеціалізований метод для виведення списку символів виглядатиме наступним чином:

void

List <char>::print()

{

... // Тіло спеціалізованого варіанту методу print

}

Якщо в програмі створити екземпляр шаблона List типу char, відповідний варіант методу буде викликаний автоматично. При спеціалізації цілого класу після опису узагальненого варіанту класу поміщається повний опис спеціалізованого класу, при цьому вимагається наново визначити всі його методи. Припустимо, вимагається спеціалізувати шаблон Block для зберігання 100 цілих величин:

class Block<int, 100>

{

public:

Block()

{

p = new int [100];

}

~Block()

{

delete [] p;

}

operator int *();

protected:

int * p;

};

Block<int. 100>::operator int *()

{

return p;

}

При визначенні екземплярів шаблона Block з параметрами int і 100 буде задіяний спеціалізований варіант.

Переваги і недоліки шаблонів

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


 

А также другие работы, которые могут Вас заинтересовать

52337. Запліднення і внутрішньоутробний розвиток людини 621 KB
  Мета: створити умови для: усвідомленого інформаційного запиту про ембріональний розвиток людини; розуміння учнями значущості знань про індивідуальний розвиток людини; формування морального відношення до зачаття і вагітності, відповідальності за життя, яке не народилось;
52338. Основні групи м’язів тіла людини. Фізичні якості м’язів 50 KB
  Обладнання: таблиця М’язи людини роздаткові картки підручник Біологія 9 клас автор А.Вступ До опорнорухової системи людини належить на лише скелет людини але й м’язи які мають властивість збуджуватися і скорочуватися і в результаті виконують основну функцію – рухову. До речі скелетні м’язи складають близько 40 маси тіла людини. Скелетні м’язи виконують функцію м’язового насоса при чому покращується рух венозної крові до серця.
52340. Суцвіття 550 KB
  Мета уроку: сформувати поняття суцвіттязнайомити учнів з функціями суцвіть розглянути їх будову і різноманітність; розвивати: вміння виділяти головне порівнюватиузагальнювати систематизувативміння розпізнавати суцвіття і тренувати їх у застосуванні набутих знань у нестандартних ситуаціях; виховувати: естетичні смаки учнів відповідальність за стан навколишнього середовища бережливе ставлення до природи. Обладнання: таблиці: Будова квітки Будова суцвіть Прості суцвіття Складні суцвіттякартки з кросвордом схемою та...
52341. Віруси 711.5 KB
  Вивчити будову класифікацію вірусів. Велика популярність персональних комп’ютерів разом з розвитком мережі Інтернет сприяла появі великої кількості різних шкідливих програм – вірусів. Постановка цілей і задач Мета: Ввести поняття €œВірус; Вивчити його будову; Класифікацію вірусів; З’ясувати їх вплив на живу та неживу природу. Деякі віруси вносять також власні білки необхідні для її реалізації особливо це характерно для вірусів що містять негативні РНК.
52342. Прес-конференція «Різноманітність птахів» 71.5 KB
  Мета: розширити знання учнів про представників класу Птахи показати їх різноманітність особливості будови та способу життя пристосування до середовища; ознайомити з характерними ознаками представників надряду Безкілеві птахи та Пінгвіни з представниками кілегрудих фауни України; продовжувати розвивати комунікативні та соціальні компетентності учнів; виховувати свідоме ставлення до природи її багатств та її захисту. Птахи це диво Їх велика кількість. Птахи Хоча ви вже багато вивчили про птахів але коли ви почуєте це слово кожний...
52343. Фантазія і творчість у роботі архітекторів 4.35 MB
  Мета уроку: Розширити уявлення про дизайн, ознайомити з наукою біонікою та показати її значення в житті людей. Спонукати до пізнання законів природи, пошуку біонічних форм. Навчити створювати контурні замальовки спрощених природних форм.
52344. Охорона біосфери 163 KB
  Тема уроку Охорона біосфери Мета: закріпити знання про біосферу як екологічну систему іі складові основні її властивості узагальнити і розширити знання учнів про напрямки діяльності людини по охороні біосфери заповідний фонд України познайомити з концепцією сталого розвитку складовими екоцентричної та антропоцентричної структури свідомості; вдосконалювати навички порівнювати робити висновки; розвивати навички вирішувати екологічні ситуації самостійно готувати матеріал до уроку створювати мультимедійну...
52345. Вплив людини на стан біосфери 162.5 KB
  МЕТА: Освітня: Розвивати вміння знаходити взаємозв’язки між діями й наслідками діяльності людини. Обладнання: Інтерактивна дошка слайди презентації фотографії з позитивним і негативними прикладами впливу людини на стан біосфери вірші про природу. Концепція уроку: Показати що діяльність людини стала провідним екологічним фактором на планеті й що зростання населення Землі призвело до демографичного вибуху перенаселеності й екологічних проблем; описати основні природні ресурси й наголосити на проблемі їхнього раціонального використання.