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++ надає великий набір шаблонів для різних способів організації зберігання і обробки даних.


 

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

81710. Испытание любовью как средство характеристики героя в произведениях отечественной классики 19 веке 33.02 KB
  Способность человека любить – это для Т. критерий его состоятельности, и своих героев писатель непременно проводит через это испытание. Любовь в мироощущении Т. всегда отмечена знаком трагедии. Он говорит о чувстве либо отвергнутом, либо неосуществленном, либо оборванном на первой высокой ноте. Любовь трагична, ибо она по сути своей есть стремление к идеалу, идеал же недостижим.
81711. Футуризм как литературное направление. Анализ одного стихотворения поэта-футуриста 38.85 KB
  В творчестве Хлебникова Бурлюка зазвучали отголоски славянофильства свойственного русскому декадентству начала века. Хлебникова посвоему раннего Маяковского. Хлебникова В. Основные положения футуристической программы выразились в творчестве Велимира Хлебникова Виктора Владимировича Хлебникова 1885 1922 ведущего участника группы кубофутуристов или будетлян как назвал их поэт.
81712. Мысль семейная в произведениях отечественной классики 19 веке 32.23 KB
  Писатель считает что основой формирования личности является семья. Семья в понимании Т. Идеалом семейного бытия является семья Ростовых. и княжны Марьи состоявшееся Семья Н.
81713. Фантастические мотивы и образы в произведениях отечественной литературы 46.25 KB
  Петербургские повести с включением Коляски и отрывка Рим были объединены Гоголем в III томе Собрания его сочинений в 1842 г. Три повести Арабесок рассредоточены по всему сборнику чередуясь с историческими и эстетическими этюдами. Портрет является опытом создания романтической фантастической повести на современном материале. В повести она воплощается в образе ростовщика Петромихали его денег его страшного портрета.
81714. Тема России в поэзии А. Блока. Чтение наизусть и разбор одного стихотворения 32.56 KB
  В основе символизма лежит философия Владимира Соловьева, именем которого было ознаменовано для Блока - и не для него одного – начало 90 – х г. г. 19 в., то есть период « Прекрасной Дамы». Учение, теократию В. Соловьева можно довольно точно определить как воплощение духовного в жизненном. Вечная Женственность
81715. Черты социально – бытовой драмы и высокой трагедии в пьесе А. Островского « Гроза». Речевая характеристика персонажей 35.44 KB
  Катерина луч света в темном царстве по выражению Добролюбова появилась не откуда-то из просторов другой жизни другого исторического времени ведь патриархальный Калинов и современная ему Москва где кипит суета или железная дорога о которой рассказывает странница Феклуша это разное историческое время а родилась сформировалась в тех же калиновских условиях. О подробно демонстрирует это уже в экспозиции пьесы когда Катерина рассказывает Варваре о своей жизни в девичестве Главный мотив этого рассказа все пронизывающая любовь к...
81716. Противопоставление героев (Обломов – Штольц, Обломов – Ольга) и его значение в идейном содержании романа И.А.Гончарова «Обломов» 34.08 KB
  В 1849 г в альманахе Литературный сборник с иллюстрациями при журнале Современник был напечатан Сон Обломова. Современник признал мастерскими и правдивыми сцены из усадебной жизни и увидел в Сне Обломова творческий шаг вперед по сравнению с Обыкновенной историей. Но степень объективной моральной ценности Обломова все же невелика. Внутреннее единство барина и опустившегося слуги Захара трагикомическое по своей сути воспринимается как фарсовый вариант морального умирания Обломова.
81717. Лирика С. А. Есенина. Основные темы, идеи, художественное мастерство. Чтение наизусть одного стихотворения 44.16 KB
  Уже первый и единственный вышедший до революции сборник поэта Радуница 1916 содержал в себе эстетически завершенную картину деревенского мира воплощенную в такой же цельной системе неповторимых есенинских образов и интонаций. Так намечается уход поэта из реального мира на поиски какойто заповедной родины нездешних полей и перелесков неразгаданной земли скрытых от его взора синим мраком куда тем не менее влечется его душа. Туда в свою вневременную звездную стихию и устремляется душа поэта. В стихотворении Там где вечно...
81718. Образ Наполеона и тема наполеонизма в произведениях отечественной классики 19 века 31.37 KB
  В связи с этим возникает вопрос о роли личности в данном историческом событии и в истории вообще. утверждает решающую роль народных масс в истории. Вопрос о роли личности в истории поднимается в начале 3 тома 1 часть 1 глава: 1. Применительно к истории личность в большей степени действует бессознательно чем сознательно.