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


 

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

13098. Дружба и отношения между мальчиками и девочками. Классный час 32.5 KB
  Классный час на тему Дружба и отношения между мальчиками и девочками Цель: создавать условия для эмоционального роста детей; углубить представления о гендерном равенстве. Задачи: раскрыть значение понятий мужское дело и женское дело; развивать кул
13099. Классный час на тему «Приключение по стране рассказов Н.Н. Носова» 37.79 KB
  Классный час на тему Приключение по стране рассказов Н.Н. Носова. Тема: Приключение по стране рассказов Н.Н. Носова. Цель занятия: в игровой форме провести ознакомление и повторение произведений Н.Н. Носова. Участники: класс Продолжительность: 45 минут ...
13100. Классный час на тему «Что значит быть настоящим другом?» 51.5 KB
  Классный час на тему Что значит быть настоящим другом. 4й класс Цель: помочь детям разобраться в том каким должен быть настоящий друг. Задачи: определить важные для дружбы нравственные качества и содействовать их формированию; провести самооценку учащимися
13101. Сабақтың тақырыбы: БАЛА АБАЙ. 80.5 KB
  7 Ана тілі 2сынып Сабақтың тақырыбы: БАЛА АБАЙ. Сабақтың мақсаты: 1. Оқушыларды қазақтың классик ақыны Абай Құнанбаевтың өмірімен толығырақ таныстыру. 2. Мәтіндегі негізгі идеяны ұғындыру. 3. Әр түрлі ой дамыту стратегиялары арқылы өздік жұмыс і
13102. Сабақтың тақырыбы: ҚАНАҒАТ ҚАРЫН ТОЙҒЫЗАР (ел аузынан) 76.5 KB
  8 Ана тілі 3сынып Сабақтың тақырыбы: қанағат қарын тойғызар ел аузынан. Сабақтың мақсаты: 1. Тақырыптың идеясын ашу қанағатшыл шыдамды болуға үйрету. 2. Өтілген сабақ пен жаңа сабақты байланыстыру арқылы шығармашылық ойлау қабілетін дамыту...
13103. Сабақтың тақырыбы: ЕР ТАРҒЫН 47.5 KB
  4 Ана тілі 4сынып Сабақтың тақырыбы: ЕР ТАРҒЫН Сабақтың мақсаты: Батырлар жыры туралы оқушыларға жанжақты түсінік беру. Елін қорғау Отанын халқын сүю батырлар жырының басты қасиеттері екендігін оқушыларға ұғындыру. Ер Тарғынның ...
13104. Сыныптарға арналған «Соңғы қоңырау» салтанатты жиынының сценарийі 59.5 KB
  11 сыныптарға арналған Соңғы қоңырау салтанатты жиынының сценарийі. 2008 жыл. Фанфары Жүргізушілер шығады: Медетов М.О. және Құдайбергенова Шұғыла. Мият: Армысыздар ұстаздар оқушылар Қош бол алтын ұя мектебім атты салатанатты жиынға жиналған қауым.
13105. 1917-1941 ж.ж.кеңес мектебі мен педагогикасы 83.5 KB
  1917-1941 ж.ж.кеңес мектебі мен педагогикасы. Мектептің революциялық қайта құрылуы және алғашқы қадамдары. Халық ағарту ісінің барлық жүйесін қайта құру революцияның алғашқы күндерінен басталады. 1917 жылы 9 қарашадағы декрет бойынша Ағарту ісінің мемлекеттік комисс...
13106. 1941-1970 жж. кеңес мектебі мен педагогикасы 99.5 KB
  1941-1970 жж. кеңес мектебі мен педагогикасы. Ұлы Отан соғысы жылдарындағы мектеп және педагогика. Кеңес халқының фашистік Германияға қарсы соғысы көптеген материалдық күшті керек етті. Еңбекке жарайтын миллиондаған адамдарды бейбіт еңбектен бөлді. Соғыстың ауыр зар...