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

Множина

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

Деструктор.

Функції:

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

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

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

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


 

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

73582. Дифференциальное исчисление функции 2.73 MB
  Фактически производная функции показывает как бы скорость изменения функции, как изменяется функция при изменении переменной. Способ логарифмического дифференцирования удобно применять для нахождения производных сложных, особенно показательных и показательно-степенных функций
73583. Сечение магнитного рассеяния нейтронов 1.11 MB
  Под магнитным взаимодействием нейтрона с электроном понимают диполь-дипольное взаимодействие между магнитным дипольным моментом нейтрона с магнитным полем В, создаваемым неспаренными электронами. Оператор такового взаимодействия равен
73584. Обыкновенные дифференциальные уравнения 3.59 MB
  Решение различных геометрических, физических и инженерных задач часто приводят к уравнениям, которые связывают независимые переменные, характеризующие ту ил иную задачу, с какой – либо функцией этих переменных и производными этой функции различных порядков.
73585. Форми організації суспільного виробництва 67 KB
  Походження суть і функції грошей. Походження суть і функції грошей. Без грошей сучасний поділ праці неможливий існують бартерні операції але це не сучасний поділ праці. Існують дві основні концепції що пояснюють причини виникнення грошей: Раціоналістична: пояснює виникнення грошей як результат домовленості між людьми про введення спеціального інструмента грошей для здійснення обміну товарів.
73586. Ручной расчет интенсивностей магнитных рефлексов для образца с простой коллинеарной антиферромагнитной структурой 294 KB
  Другими словами рассчитанная нами нейтронограмма должна содержать два типа рефлексов ядерные и магнитные рефлексы. Интенсивности и угловые положения ядерных рефлексов для нашего образца мы рассчитали на Лекции. Поэтому сейчас рассчитаем только интенсивности магнитных рефлексов.
73587. Уточнение кристаллической и магнитной структур с помощью программы FULLPROF 866.5 KB
  Выбор фона на дифракционной картине: фиксированный и уточняемый. Расчет до 16 различных фаз. Учет текстуры, поправка на поглощение падающего излучения. Расчет кристаллической структуры. Расчет магнитной структуры: соизмеримой и несоизмеримой.
73589. Симметрийный анализ магнитных стуктур 303.5 KB
  Для описания и классификации магнитной структуры возможны два способа. Один из них – это путь магнитной симметрии, другой – применение теории представлений групп. Магнитная структура может быть описана псевдовекторной функцией