8435

Параметризовані класи (шаблони)

Лекция

Информатика, кибернетика и программирование

Параметризовані класи (шаблони). Мета работи Ознайомитись з принципами створення шаблонів. Теми для попереднього вивчення Введення у класи Структура класу и функції. Варіанти індивідуальних завдань...

Украинкский

2013-02-11

69.5 KB

5 чел.

Параметризовані класи (шаблони)

1. Мета работи

Ознайомитись з принципами створення шаблонів.

2. Теми для попереднього вивчення

  •  Введення у класи
  •  Структура класу и функції

3. Варіанти індивідуальних завдань

 1      

 2      

 3      

 4      

 5      

 6      

 7      

 8      

 9      

10      

11      

12      

13      

14      

15      

16      

17      

18      

19      

20      

21      

22      

23      

24      

    

4. Завдання до виконання

Згідно з номером варіанта спроектувати шаблон для класу, згідно зі своїм варіантом, та продемонструвати роботу з ними.  

5. Теоретичні відомості

Шаблони. Шаблон (template) — це механізм параметризації визначення класу чи функції довільним типом. Шаблони дозволяють застосовувати простий спосіб введення різного роду загальних концепцій та методів їх спільного використання. Результуючий код за ефективністю не поступається написаному вручну спеціалізованому коду. Клас, що утворюється із шаблону класу у разі конкретного задання значення параметра, є цілком нормальним класом, тому шаблон класу називають генератором типів. Такий процес генерації оголошення класу чи функції за шаблоном та аргументом шаблону називають інстанціюванням. Якщо має місце генерація різних версій шаблону для різних значень параметра, то кожну з цих версій називають спеціалізацією.

Стандартна бібліотека С++ містить класи-контейнери, реалізовані у формі шаблонів. Ось деякі з них:

vector                одновимірний масив елементів

list                     двозв’язний список елементів

deque                  черга елементів з двома кінцями

stack                  стек елементів

map                       асоціативний масив елементів

set                       множина елементів

 

Шаблон може мати кілька параметрів, які можуть бути: класами, стандартними типами, шаблонами; аргумент шаблону може бути константним виразом, адресою об’єкта чи функції; не може бути рядковим літералом. Допускаються значення аргументів шаблонів за замовчуванням, синтаксис та правила використання аналогічні з аргументами функцій за замовчуванням. Одна спеціалізація вважається більш спеціалізованою за іншу, якщо список аргументів першої спеціалізації відповідає другій, а не навпаки. Генеруючи типи, перевагу віддають більш спеціалізованим версіям:

template<class T> class Vector                  // шаблон

{

T* v;

int size;

public:

 Vector();

Vector(int);

//...

};

Наведемо приклад створення об’єкта параметризованого класу:

int main()

{ //...

Vector<int> vi;    //інстанціювання

Vector<char*> vpc;

Vector<double> vd;

//...

}

template<class T T default_value=0> class Vector<T*>

{ /*…*/};

//часткова спеціалізація Vector для значень параметра, поданих у вигляді T*

Vector<int**> vppi; // тут T - int*

template<> class Vector<void*>{/*…*/};

//повна спеціалізація без указання  параметра шаблону

Vector<void*> vpv;

Іноді параметр шаблону функції може бути виведений з типів її аргументів під час виклику, тому його не потрібно вказувати під час інстанціювання:

template<class T> void sort(Vector<T>& v) {/*…*/} //шаблон функції

sort(vi); //vi типу Vector<int>, не потрібно писати sort<int>

Шаблони функцій можна перевантажувати звичайними методами. Розв’язуючи відповідності, перевагу віддають більш спеціалізованим шаблонам:

template<class T> T sqrt(T);

template<class T> complex<T> sqrt(complex<T>);

double sqrt(double);

void f(complex<double> z)

{

 sqrt(2);          //sqrt<int>(int)

 sqrt(2.0);     //sqrt(double)

 sqrt(z);         //sqrt<double>(complex<double>)

}

Шаблони можна ефективно використовувати для успадкування. Методику абстракції за допомогою шаблонів називають параметричним поліморфізмом або поліморфізмом часу компіляції на відміну від поліморфізму часу виконання, що забезпечується віртуальними функціями.

Можна створювати шаблони класів, що походять як від класу, що не є шаблоном, так і від шаблону класу. Класи чи шаблони класів можуть мати члени-шаблони. Члени-шаблони не можуть бути віртуальними.

.

Варіанти індивідуальних завдань

Варіант №1

Динамічний одновимірний масив

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента масиву;

виведення масиву на екран;

пошук елемента масиву;

очищення масиву.

Варіант №2

Динамічний одновимірний масив

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента масиву;

виведення масиву на екран;

інформація про максимальний та поточний розміри масиву;

пошук максимального та мінімального елемента масиву;

Варіант №3

Динамічний двовимірний масив

Конструктори: за замовчуванням, копіювання, з різною кількістю параметрів.

Деструктор.

Функції (дві-три на вибір):

запис / одержання елемента масиву;

виведення масиву на екран;

пошук елемента масиву;

очищення масиву.

Варіант №4

Динамічний двовимірний масив

Конструктори: за замовчуванням, копіювання, з різною кількістю параметрів.

Деструктор.

Функції (дві-три на вибір):

запис / одержання елемента масиву;

виведення масиву на екран;

інформація про максимальний та поточний розміри масиву;

пошук максимального та мінімального елемента масиву;

Варіант №5

Черга елементів

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

виведення всіх елементів на екран;

інформація про максимальну та поточну кількість елементів.

Варіант №6

Динамічний список

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента;

знищення заданої кількості або всіх елементів.

Варіант №7

Динамічний список

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

вставлення елемента з голови (хвоста) у заданому місці;

виведення списку на екран;

пошук елемента списку;

очищення списку;

Варіант №8

Динамічний список

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

видалення елемента з голови (хвоста) із заданого місця;

інформація про кількість елементів списку;

очищення списку;

одержання наступного (попереднього) елемента.

Варіант №9

Динамічний список

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

вставлення елемента з голови (хвоста) у заданому місці;

виведення списку на екран;

пошук елемента списку;

одержання голови (хвоста) списку;

Варіант №10

Множина

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

додавання елемента до множини;

виведення всіх елементів множини на екран;

перевірка входження елемента до множини;

очищення множини;

Вариант №11

Множина

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

додавання елемента до множини;

видалення елемента із множини;

перевірка входження елемента до множини;

очищення множини;

Вариант №12

Множина

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

видалення елемента із множини;

виведення всіх елементів множини на екран;

очищення множини;

перебирання всіх елементів множини.

Вариант №13

Черга елементів

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

виведення всіх елементів на екран;

запис / одержання елемента;

знищення заданої кількості або всіх елементів.

Вариант №14

Стек елементів

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

виведення всіх елементів на екран;

запис / одержання елемента;

Вариант №15

Стек елементів

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

виведення всіх елементів на екран;

інформація про максимальну та поточну кількість елементів.

Вариант №16

Динамічний одновимірний масив

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента масиву;

виведення масиву на екран;

пошук максимального та мінімального елемента масиву;

Вариант №17

Динамічний двовимірний масив

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента масиву;

виведення масиву на екран;

пошук максимального та мінімального елемента масиву;

Вариант №18

Динамічний список

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента;

знищення заданої кількості або всіх елементів.

Вариант №19

Динамічний список

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

вставлення елемента з голови (хвоста) у заданому місці;

виведення списку на екран;

пошук елемента списку;

очищення списку;

Вариант №20

Динамічний двовимірний масив

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

запис / одержання елемента масиву;

виведення масиву на екран;

пошук елемента масиву;

очищення масиву.

Вариант №21

Динамічний одновимірний масив

Конструктори: за замовчуванням, копіювання, з різною кількістю параметрів.

Деструктор.

Функції (дві-три на вибір):

запис / одержання елемента масиву;

виведення масиву на екран;

пошук елемента масиву;

очищення масиву.

Вариант №22

Стек елементів

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

виведення всіх елементів на екран;

запис / одержання елемента;

знищення заданої кількості або всіх елементів.

Вариант №23

Множина

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

видалення елемента із множини;

виведення всіх елементів множини на екран;

очищення множини;

перебирання всіх елементів множини

Вариант №24

Множина

Конструктори: за замовчуванням, з параметрами та копіювання.

Деструктор.

Функції:

додавання елемента до множини;

видалення елемента із множини;

перевірка входження елемента до множини;

очищення множини;


 

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

67661. Совершенствование мотивации персонала (на примере ОАО «Жировой комбинат») 742 KB
  Однако в последние 1012 лет в теории и практике мотивации и стимулирования труда наблюдалось почти полное затишье. Отечественная социология труда и особенно некогда процветающая промышленная социология почти сошли на нет. Государственные частные корпоративные предприятия на практике...
67662. Практика применения лексико-грамматических особенностей перевода на примере текстов биографии и выступлений А. Адамса 207.5 KB
  В биографиях публицистического стиля прослеживается определенная стратегия изложения материала, имеющая непосредственное отношение к функционированию языковых единиц в тексте. В целях оптимального описания стилистических свойств рассматриваемых в работе текстов
67663. Создание фирменной стилистики для форума по нанотехнологиям 20.37 MB
  Фирменный стиль влияет на формирование мнения партнеров сотрудников поставщиков акционеров и клиентов о компании уровень доверия к ней и готовность вкладывать свои ресурсы в данный бизнес. Фирменный стиль помогает компании: добиться эффекта запоминаемости фирмы и лучшего отношения своих уже существующих и уже потенциальных клиентов.
67664. Создание базы данных для ведения учета товара АРМ мечендайзер ТОО «ATService» 3.12 MB
  Созданная программа «АРМ мечендайзер ТОО «ATService»» является перспективной разработкой, так как на основе уже хранящейся информации работают отделы служб вычислительной техники многих организаций. Таким образом, не исключено создание другими разработчиками новых версий программы...
67665. ТЕНДЕНЦИИ РАЗВИТИЯ ОБРАЗОВАНИЯ В ПОСТСОВЕТСКОЙ РОССИИ 647 KB
  Цель исследования – проанализировать современное состояние образования в России и тенденций его развития для разработки некоторых практических рекомендаций по совершенствованию образовательной деятельности на региональных уровнях: субъекта Российской Федерации...
67666. Вантажний середньо-магістральний літак підвищеної транспортної ефективності з можливістю експлуатації з ґрунтових ЗПС 16.45 MB
  Зміст розрахунково-пояснювальної записки: вибір проектних параметрів вибір; вибір та обґрунтування схеми літака; розрахунок мас літака; визначення основних геометричних параметрів; розробка компоновки літака; розрахунок центровки літака; визначення основних ЛТХ; опис конструкції літака...
67667. Возможности систем вибрационного мониторинга и диагностики роторного оборудования 3.34 MB
  Цель работы показать возможность контроля технического состояния оборудования по вибрации этого оборудования а также рассмотреть назначение и возможности систем вибрационного мониторинга и диагностики роторного оборудования. Для этого измеряется не только низкочастотная и среднечастотная...
67668. Планировка и застройка жилого образования в городе Екатеринбурге 305 KB
  Разрабатываемый участок расположен в Железнодорожном районе города Екатеринбург. Ограничен улицами Челюскинцев – Смазчиков, Восточная, Луначарского, Шевченко – Советская. Улица Восточная является магистральной улицей городского значения непрерывного движения. Челюскинцев, Смазчиков, Луначарского...