8435
Параметризовані класи (шаблони)
Лекция
Информатика, кибернетика и программирование
Параметризовані класи (шаблони). Мета работи Ознайомитись з принципами створення шаблонів. Теми для попереднього вивчення Введення у класи Структура класу и функції. Варіанти індивідуальних завдань...
Украинкский
2013-02-11
69.5 KB
5 чел.
Ознайомитись з принципами створення шаблонів.
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
|
Згідно з номером варіанта спроектувати шаблон для класу, згідно зі своїм варіантом, та продемонструвати роботу з ними.
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>)
}
Шаблони можна ефективно використовувати для успадкування. Методику абстракції за допомогою шаблонів називають параметричним поліморфізмом або поліморфізмом часу компіляції на відміну від поліморфізму часу виконання, що забезпечується віртуальними функціями.
Можна створювати шаблони класів, що походять як від класу, що не є шаблоном, так і від шаблону класу. Класи чи шаблони класів можуть мати члени-шаблони. Члени-шаблони не можуть бути віртуальними.
.
Варіанти індивідуальних завдань
Динамічний одновимірний масив
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента масиву;
виведення масиву на екран;
пошук елемента масиву;
очищення масиву.
Динамічний одновимірний масив
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента масиву;
виведення масиву на екран;
інформація про максимальний та поточний розміри масиву;
пошук максимального та мінімального елемента масиву;
Динамічний двовимірний масив
Конструктори: за замовчуванням, копіювання, з різною кількістю параметрів.
Деструктор.
Функції (дві-три на вибір):
запис / одержання елемента масиву;
виведення масиву на екран;
пошук елемента масиву;
очищення масиву.
Динамічний двовимірний масив
Конструктори: за замовчуванням, копіювання, з різною кількістю параметрів.
Деструктор.
Функції (дві-три на вибір):
запис / одержання елемента масиву;
виведення масиву на екран;
інформація про максимальний та поточний розміри масиву;
пошук максимального та мінімального елемента масиву;
Черга елементів
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
виведення всіх елементів на екран;
інформація про максимальну та поточну кількість елементів.
Динамічний список
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента;
знищення заданої кількості або всіх елементів.
Динамічний список
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
вставлення елемента з голови (хвоста) у заданому місці;
виведення списку на екран;
пошук елемента списку;
очищення списку;
Динамічний список
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
видалення елемента з голови (хвоста) із заданого місця;
інформація про кількість елементів списку;
очищення списку;
одержання наступного (попереднього) елемента.
Динамічний список
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
вставлення елемента з голови (хвоста) у заданому місці;
виведення списку на екран;
пошук елемента списку;
одержання голови (хвоста) списку;
Множина
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
додавання елемента до множини;
виведення всіх елементів множини на екран;
перевірка входження елемента до множини;
очищення множини;
Множина
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
додавання елемента до множини;
видалення елемента із множини;
перевірка входження елемента до множини;
очищення множини;
Множина
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
видалення елемента із множини;
виведення всіх елементів множини на екран;
очищення множини;
перебирання всіх елементів множини.
Черга елементів
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
виведення всіх елементів на екран;
запис / одержання елемента;
знищення заданої кількості або всіх елементів.
Стек елементів
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
виведення всіх елементів на екран;
запис / одержання елемента;
Стек елементів
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
виведення всіх елементів на екран;
інформація про максимальну та поточну кількість елементів.
Динамічний одновимірний масив
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента масиву;
виведення масиву на екран;
пошук максимального та мінімального елемента масиву;
Динамічний двовимірний масив
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента масиву;
виведення масиву на екран;
пошук максимального та мінімального елемента масиву;
Динамічний список
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента;
знищення заданої кількості або всіх елементів.
Динамічний список
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
вставлення елемента з голови (хвоста) у заданому місці;
виведення списку на екран;
пошук елемента списку;
очищення списку;
Динамічний двовимірний масив
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
запис / одержання елемента масиву;
виведення масиву на екран;
пошук елемента масиву;
очищення масиву.
Динамічний одновимірний масив
Конструктори: за замовчуванням, копіювання, з різною кількістю параметрів.
Деструктор.
Функції (дві-три на вибір):
запис / одержання елемента масиву;
виведення масиву на екран;
пошук елемента масиву;
очищення масиву.
Стек елементів
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
виведення всіх елементів на екран;
запис / одержання елемента;
знищення заданої кількості або всіх елементів.
Множина
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
видалення елемента із множини;
виведення всіх елементів множини на екран;
очищення множини;
перебирання всіх елементів множини
Множина
Конструктори: за замовчуванням, з параметрами та копіювання.
Деструктор.
Функції:
додавання елемента до множини;
видалення елемента із множини;
перевірка входження елемента до множини;
очищення множини;
А также другие работы, которые могут Вас заинтересовать | |||
50544. | Расчет сопротивления заземляющего устройства, состоящего из вертикальных электродов, соединенных горизонтальной полосой | 121 KB | |
Вычислить длину горизонтальной полосы соединяющей вертикальные электроды м для электродов расположенных в ряд; м для электродов расположенных по контуру. | |||
50545. | Изучение нормального закона распределения случайных величин (закон Гаусса) на основе опытных данных | 95.5 KB | |
Составить интервальную таблицу частот статистический интервальный ряд распределения: а Разбить весь диапазон случайных величин на k интервалов: 107; 108 108; 109 и т. Строки 13 Таблицы 2 называют статистическим интервальным рядом распределения. Интервальный ряд распределения изобразить графически в виде гистограммы. | |||
50549. | Измерение с помощью микрометра среднего объёма металлического цилиндра. Расчет абсолютной и относительной погрешности измерения | 75.5 KB | |
Расчётные формулы: формула нахождения среднего объёма цилиндра; Расчёт ошибок прямых измерений. По таблице Стьюдента для доверительной вероятности 095 и числа измерений n определяем 4. Рассчитываем полные погрешности измерений по формуле: 7. Рассчитываем относительные погрешности измерений: Расчет ошибок косвенных измерений. | |||
50551. | Исследование изобарного процесса | 97.5 KB | |
Изучение характеристик процесса изобарного расширения воздуха. Если воздух используемый в качестве рабочего тела находится при малом давлении его можно рассматривать как идеальный газ состояние которого описывается уравнением Клапейрона-Менделеева а если относительные изменения параметров Δφ φ в процессах невелики то такие процессы являются квазиравновесными. Уравнение... | |||
50552. | Исследование изотермического процесса | 113 KB | |
В данной лабораторной работе осуществляется подвод тепла к воздуху при практически атмосферном давлении благодаря чему воздух может рассматриваться как идеальный газ а малые изменения параметров делают процесс квазиравновесным. Описание лабораторной установки. Схема лабораторной установки приведена на рис. Схема лабораторной установки. | |||