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


 

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

37950. Определение коэффициента вязкости воздуха и кинематических характеристик теплового движения его молекул 888 KB
  1 Определение коэффициента вязкости воздуха и кинематических характеристик теплового движения его молекул: Методические указания к лабораторной работе №23 по курсу общей физики Уфимск. В работе на основе исследования одного из явления переноса внутреннего трения определяютcя коэффициент вязкости воздуха а также средняя длина свободного пробега и эффективный диаметр его молекул. Осипов ЛАБОРАТОРНАЯ РАБОТА № 23 ОПРЕДЕЛЕНИЕ КОЭФФИЦИЕНТА ВЯЗКОСТИ ВОЗДУХА И КИНЕМАТИЧЕСКИХ ХАРАКТЕРИСТИК ТЕПЛОВОГО ДВИЖЕНИЯ ЕГО МОЛЕКУЛ 1.2 Определение средней длины...
37951. ИЗУЧЕНИЕ ГАЗОВЫХ ЗАКОНОВ И ОПРЕДЕЛЕНИЕ КОЭФФИЦИЕНТА ПУАССОНА ГАЗА МЕТОДОМ КЛЕМАНА – ДЕЗОРМА 157.5 KB
  Теплоемкость и коэффициент Пуассона газа.14 лабораторная работа № 24 ИЗУЧЕНИЕ ГАЗОВЫХ ЗАКОНОВ И ОПРЕДЕЛЕНИЕ КОЭФФИЦИЕНТА ПУАССОНА ГАЗА МЕТОДОМ КЛЕМАНА ДЕЗОРМА Цель работы Изучение различных процессов изменения состояния газа и определение коэффициента Пуассона воздуха. Теплоемкость и коэффициент Пуассона газа Удельной теплоемкостью вещества называется величина равная количеству теплоты которую надо передать единице массы этого вещества для увеличения его температуры на 1К а молярной теплоемкостью количество теплоты которое...
37952. ОПРЕДЕЛЕНИЕ КОЭФФИЦИЕНТОВ ТЕПЛОПРОВОДНОСТИ МЕТАЛЛОВ 2.23 MB
  13 ЛАБОРАТОРНАЯ РАБОТА № 25 ОПРЕДЕЛЕНИЕ КОЭФФИЦИЕНТОВ ТЕПЛОПРОВОДНОСТИ МЕТАЛЛОВ Цель работы Изучение явления теплопроводности и определение коэффициентов теплопроводности чистых металлов и сплавов. Если в неравномерно нагретых жидкостях и газах тепловая энергия передается преимущественно за счет конвекции при которой происходит перемещение вещества между областями с различной температурой то в твердых телах тепло переносится только за счет теплопроводности. Распространение тепловой энергии путем теплопроводности обусловлено хаотическим...
37953. ИЗУЧЕНИЕ ВЗИМОСВЯЗИ ПАРМЕТРОВ СОСТОЯНИЯ ИДЕАЛЬНОГО ГАЗА И ГАЗОВЫХ ЗАКОНОВ 150.5 KB
  Экспериментальная проверка уравнения состояния идеального газа.13 лабораторная работа № 29 ИЗУЧЕНИЕ ВЗИМОСВЯЗИ ПАРМЕТРОВ СОСТОЯНИЯ ИДЕАЛЬНОГО ГАЗА И ГАЗОВЫХ ЗАКОНОВ Цель работы 1. Изучение взаимосвязи макропараметров определяющих состояние идеального газа. Экспериментальная проверка уравнения состояния идеального газа.
37954. Исследование электростатического поля и изображение его при помощи силовых линий и поверхностей равного потенциала 867.5 KB
  Исследование электростатического поля Цель работы Экспериментальное исследование электростатического поля и изображение его при помощи силовых линий и поверхностей равного потенциала. Напряженностью электрического поля называют силу действующую на единичный положительный пробный заряд. Если электрическое поле создается системой зарядов то напряженность поля в данной точке определяется по принципу суперпозиции...
37955. ИЗУЧЕНИЕ ЗАКОНОВ ПОСТОЯННОГО ТОКА 1.19 MB
  Электрическим током называют упорядоченное движение зарядов. Эти заряды называют носителями тока. Линия тока есть математическая линия, направление касательной которой в каждой точке совпадает с направлением скорости носителей тока. За положительное направление тока принято считать направление скорости положительно заряженных частиц.
37956. Девиантное поведение. Концепции девиантного поведения 17.59 KB
  Девиантное поведение – поведение, отклоняющееся от нормы; когда человек ведет себя не в соответствии с нормами и стандартами поведения, принятыми в данном обществе.
37958. Определение моментов инерции твердых тел методом трифилярного подвеса 318.5 KB
  Момент инерции.1] Список литературы Лабораторная работа № 1 Определение моментов инерции твердых тел методом трифилярного подвеса 1. Экспериментальное определение моментов инерции твердых тел. Момент инерции.