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


 

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

49131. Устройство сбора телеметрической информации 761 KB
  Конструктивная реализация устройства включает в себя ряд коммутаторов с подключенными к ним дешифраторами аналогово-цифровой преобразователь АЦП и микропроцессорный блок включающий в себя сам микропроцессор тактовый генератор и память ПЗУ и ОЗУ Принцип работы схемы: Основными устройствами системы являются: коммутатор усилитель АЦП микропроцессорный блок микропроцессор ПЗУ ОЗУ шинные формирователи. Количество разрядов АЦП необходимых для ввода информации по формуле равно: ; АЦП следует выбирать с разрядностью не менее 4....
49133. ОПРЕДЕЛЕНИЕ ТИПА ЛИЧНОСТИ ПО ПРИНЦИПУ «ЛИДЕР ЛИ ТЫ» 726 KB
  Искусственные нейронные сети Многослойные искусственные нейронные сети. А уже в 1943 году Маккалок и Питтс формализуют понятие нейронной сети в фундаментальной статье о логическом исчислении идей и нервной активности. Кохоненом представлена модель сети решающей задачу кластеризации и обучающейся без учителя самоорганизующаяся карта Кохонена.
49134. Прогнозирование исхода выборов президента 887.5 KB
  Искусственные нейронные сети Нейронные сети возникли из исследований в области искусственного интеллекта а именно из попыток воспроизвести способность биологических нервных систем обучаться и исправлять ошибки моделируя низкоуровневую структуру мозга. Целью моей курсовой работы является построение такой нейронной сети которая бы с наибольшей точностью прогнозировала исход выборов президента нашей страны. Искусственные нейронные сети Искусственные нейронные сети НС совокупность моделей биологических нейронных сетей.
49135. Использование нейронных сетей для определения темперамента человека 564.5 KB
  При обучении на вход нейросети один за другим подаются исходные данные и сеть генерирует свои ответы. Цель: показать можно ли использовать нейронные сети и эффективно ли применение нейронных сетей при определении человеческого темперамента. Искусственный интеллект и нейросетевые технологии Нейронные сети и нейрокомпьютеры это одно из направлений компьютерной индустрии в основе которого лежит идея создания искусственных интеллектуальных устройств по образу и подобию человеческого мозга. Искусственные нейронные сети подобно...
49136. Здійснення економічної діагностики підприємства 160.63 KB
  Ключовими елементами системи діагностики діяльності підприємства є: власники, керівники, тематичні фахівці підприємства, інвестори, кредитори підприємства, споживачі, постачальники, контрагенти, державні органи влади тощо. окремі сфери, напрями діяльності, підрозділи, працівники, елементи внутрішнього та зовнішнього середовищ, підприємство в цілому.
49137. Совершенстование маркетинговый деятельности гостиницы «Корстон» 230.51 KB
  Отечественные специалисты в большинстве своем пока не владеют специальной методикой проведения исследований, отвечающих международным стандартам и отечественным особенностям работ подобного рода. «Низкое качество исполнения маркетинговых исследований и расчетов, не учитывающих гостиничную специфику (чаще всего за основу берется типовая методика для промышленного предприятия)
49138. МИКРОПРОЦЕССОРНАЯ СИСТЕМА УПРАВЛЕНИЯ 755.5 KB
  Конечный датчик служит для сигнализации системе о том, что она максимально переместилась от нулевого положения или находится в нулевом положении. В качестве конечного датчика можно выбрать реле (такие как поляризованные, герметизированные и их виды: шариковые, плунжерные и т.д.) В данной системе требуется один конечный датчик (датчик нулевой позиции)
49139. Трехзвенный Г-образный фильтр верхних частот 667 KB
  Переходная харатеристика Техническое задание Электрическая принципиальная схема Задание: Расчет АЧХ ФЧХ и переходной характеристики трехзвенного Гобразного фильтра. Расчет Рис.