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


 

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

42188. ИССЛЕДОВАНИЕ АПЕРИОДИЧЕСКОГО И КОЛЕБАТЕЛЬНОГО РАЗРЯДОВ КОНДЕНСАТОРА 325.5 KB
  Исследование процесса разряда конденсатора на активное сопротивление. Определение влияния на разряд конденсатора значения активного сопротивления. Опытное определение величины емкости конденсатора по осциллограмме. Исследование колебательного разряда конденсатора.
42189. ИССЛЕДОВАНИЕ ЭЛЕКТРИЧЕСКОЙ ЦЕПИ С НЕСИНУСОИДАЛЬНЫМИ НАПРЯЖЕНИЯМИ И ТОКАМИ 185 KB
  Разложение несинусоидальной кривой графо-аналитическим способом в ряд Фурье и определение коэффициентов характеризующих несинусоидальную кривую. Определение влияния характера цепи R; RL; RC на форму кривой несинусоидального тока при подключении ее к источнику несинусоидального напряжения. Определение ординат несинусоидальной кривой в m дискретных точках.10 Затем находят соответствующие ординаты кривой f1ωt; f2ωt; f3ωt и заменяют интегралы...
42191. Принцип работы волоконно-оптического датчика (ВОД) магнитного поля и электрического тока 862 KB
  Однако применение различных ВОД электромагнитных полей сдерживается наличием у них относительно высокой чувствительности коэффициента преобразования датчика к температуре обусловленной температурным дрейфом характеристик вещества чувствительного элемента. Чувствительность ВОД к магнитному полю и электрическому току определяется коэффициентом преобразования чувствительного элемента ЧЭ который пропорционален углу Фарадея . Однако увеличение L в Bi12SiO20 может привести к проявлению влияния ряда нелинейных эффектов на магнитооптическую...
42192. Моделирование процесса измерения основных параметров волоконно-оптических трасс по рефлектометрическим данным 291.5 KB
  Если среда в которой распространяется импульс в данном случае оптическое волокно содержит неоднородности то на рефлектограмме появятся изломы и всплески. Как было сказано выше если неоднородности в волокне отсутствуют то рефлектограмма будет представлять из себя прямую с некоторым наклоном. Ступеньки говорит о наличии неоднородности на которой происходит поглощение мощности светового импульса1. Обычно такие неоднородности наблюдаются в местах сварки оптических волокон.
42193. Электрическая цепь с одним источником питания и смешанным соединением элементов 130 KB
  Основные теоретические положения Основными элементами любой электрической цепи являются: а источники электрической энергии электромашинные генераторы аккумуляторные батареи термоэлементы и т. С помощью закона Ома описывается связь между током напряжением и сопротивлением заданного участка цепи . Согласно 1му закону Кирхгофа алгебраическая сумма токов сходящихся в любом узле цепи равна нулю т. Так как при параллельном соединении все элементы находятся под одним и тем же напряжением то используя закон Ома это уравнение можно...
42194. Вимірювання опорів на постійному струмі 115 KB
  Ознайомлення з основними видами та методами вимірювання активних електричних опорів на постійному струмі. Дослідження методичних похибок основних методів вимірювання опорів та шляхи їх усунення. Завдання на вимірювання опорів кожен студент одержує від викладача.
42195. Калібрування і повірка засобів вимірювання тиску 86 KB
  1 Мета роботи Ознайомитись з будовою і принципом дії технічних засобів для вимірювання тиску. Набути практичних навиків при повірці і калібруванні систем вимірювання тиску.2 Програма роботи Під час заняття студент повинен самостійно ознайомитись з будовою і принципом дії технічних засобів які використовуються в системах для вимірювання тиску.
42196. Обробка результатів прямих багаторазових вимірювань 263.5 KB
  Вивчення методів і набуття практичних навиків в обробці результатів багаторазових вимірювань які містять випадкові похибки. Програма роботи Під час роботи студенти вимірюють активні опори за допомогою універсального цифрового вимірювача Ф 480 так щоб досягти при цьому одержання найбільш точних результатів шляхом визначення і виключення систематичних і випадкових похибок вимірювань параметра з рівноточними значеннями відліку. З цією метою використовується методика багатократного вимірювання однієї і тієї ж величини з...