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


 

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

34161. Причины государственного регулирования 17.87 KB
  А неоправданно высокие цены сводят на нет социальный эффект экономии от масштаба. Стремление к извлечению экономической прибыли и назначение цены выше предельных издержек в случае установления единой цены на товар для различных групп потребителей приводит к сокращению объёма производства относительно конкурентного уровня и появлению DWL потерь мёртвого груза . Поскольку цены на продукцию монополий велики то бывает так что предприятия продают свои товары и услуги в кредит. Но чего государство может добиться управляя фирмами...
34162. Рынок капиталов 20.33 KB
  На спрос воздействуют рыночные факторы прежде всего цена на средства производства. Чем выше цена средств производства тем меньше спрос на них со стороны покупателя. Среди них важную роль играет цена на средства производства. Чем выше цена средств производства тем выше предложение на них со стороны продавцов.
34163. Движение капитала и его структура 14.25 KB
  Движение капитала и его структура. Движение капитала – миграция капиталов между странами приносящее доход их собственникам. В свою очередь международная миграция капитала включает экспорт импорт капитала и его функционирование за рубежом. Мировое движение капитала в современных условиях служит фактором усиления интернационализации производства увеличения темпов экономического роста и уровня занятости развития передовых отраслей промышленности и превращает финансовые рынки в важнейший стимул развития мирового хозяйства.
34164. Доход на капитал. Прибыль и норма прибыли 31.19 KB
  Прибыль и норма прибыли Доходы денежные поступления от продажи производственных ресурсов и готовой продукции. От размера полученной прибыли зависят финансовое поло жение предприятия возможности формирования фондов раз вития производства и социальной сферы материального поощ рения работников. Различают полную общую валовую балансовую чистуюостающуюся после уплаты налога с прибыли бухгалтерскуюразница между доходами от продаж и бухгалтерскими издерж ками и экономическую учитывающую вмененные альтернативные издержки прибыль....
34165. Оценка капитала и инвестиционные решения 15.86 KB
  Оценка капитала и инвестиционные решения. Оценка капитала. Оценка стоимости капитала представляет собой одну из ключевых предпосылок управления компанией и её капиталом на высоком уровне эффективности. Стоимость капитала – это цена которую компания оплачивает за привлечение капитала из разнообразных источников.
34166. Рабочая сила и труд. Наемный труд 15.76 KB
  Но под рабочей силой и до Маркса и в его время и после него понимали также разные категории людей. Иногда под рабочей силой понимают также работников какоголибо предприятия зачастую за исключением административного персонала. НАЕМНЫЙ ТРУД передача продажа работником своей рабочей силы во временное пользование собственнику средств производства в обмен на заработную плату. В большинстве стран мира используются два основных способа куплипродажи рабочей силы: индивидуальные трудовые контракты и коллективные договора соглашения.
34167. Структура рынка труда. Безработица: виды и показатели измерения 31.1 KB
  Безработица: виды и показатели измерения. По выбранному нами критерию можно выделить следующие компоненты: 1 субъекты рынка труда; 2 экономические программы решения и юридические нормы принятые субъектами; 3 рыночный механизм спрос и предложение рабочей силы цена рабочей силы конкуренция; 4 безработица и социальные выплаты связанные с ней; 5 рыночная инфраструктура. Существовавшая ранее в нашей стране административно командная система управления при которой государство как собственник основных средств производства...
34168. Сущность и организация заработной платы 21.48 KB
  Важный элемент рынка труда заработная плата т. 2Сдельная форма оплаты труда имеет четыре системы. Прямая сдельная оплата труда производится по неизменным расценкам и независимо от степени выполнения нормы выработки. Аккордная оплата труда от лат.
34169. Земля как экономический ресурс. Рента и арендная плата 26.34 KB
  Поскольку предложение земли совершенно неэластично ее цена полностью определяется спросом на землю. В связи с ограниченностью земельных участков предложение земли совершенно неэластично. Земельная рента часть прибыли возникающей при использовании невоспроизводимого производственного фактора земли. Рента экономика регулярно получаемый доход с капитала облигаций имущества земли.