Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка2011(12 лаб)_декабрь.doc
Скачиваний:
4
Добавлен:
26.08.2019
Размер:
1.1 Mб
Скачать

Приклад виконання Завдання з варіанту 2

Завдання: Шаблонний клас перетворення заданого масиву таким чином, щоб кожен елемент масиву був отриманий як exp кожного елемента (для типів int, float, long).

Розробляємо шаблон класу, який містить конструктор для виділення пам’яті динамічному масиву а, функцію заповнення масиву Zapis(int i,type t), функцію перетворення елементів масиву Processing() та функцію виводу перетвореного масиву Print().

template <class type> // опис шаблону

class Exponenta{

type *a; // ініціалізація динамічного масиву

int j;

public:

Exponenta(){a=(type*)malloc(N*sizeof(type));} //конструктор класу, що виділяє динамічну пам’ять під масив

void Zapis(int i,type t){a[i]=t;} //функція запису значення в і-тий елемент масиву

void Processing(){for(j=0;j<N;j++)a[j]=exp(a[j]);} //функція обробки масиву

void Print(){for(j=0;j<N;j++)cout<<a[j]<<" ";} //функція виводу масиву на екран

};

В головній функції main() створюємо об’єкт класу ob1для роботи з даними типу float, для цього використовуємо оператор виду:

Exponenta<float> ob1;

Лістинг програми має вигляд:

#include<iostream.h>

#include<conio.h>

#include<alloc.h>

#include<math.h>

#define N 5 // визначення кількості елементів масиву

template <class type> // опис шаблону

class Exponenta{

type *a; // ініціалізація динамічного масиву

int j;

public:

Exponenta(){a=(type*)malloc(N*sizeof(type));} //конструктор класу, що виділяє динамічну пам’ять під масив

void Zapis(int i,type t){a[i]=t;} //функція запису значення в і-тий елемент масиву

void Processing(){for(j=0;j<N;j++)a[j]=exp(a[j]);} //функція обробки масиву

void Print(){for(j=0;j<N;j++)cout<<a[j]<<" ";} //функція виводу масиву на екран

};

void main()

{

clrscr(); int i;

Exponenta<float> ob1; //завдання об’єкту класу і його типу

for(i=0;i<N;i++)

ob1.Zapis(i,i*1.25); //заповнення масиву

ob1.Processing(); //обробка масиву

ob1.Print(); //вивід масиву на екран

getch();

}

Контрольні запитання.

  1. Що таке родові функції? Для чого вони призначені?

  2. Форма об’яви родових функцій.

  3. Що таке родові класи?

  4. Коли використовуються родові класи?

  5. Форма об’яви родових класів.

  6. Ініціалізація родових класів.

  7. Наведіть приклад родового класу.

  8. Чим відрізняються родові функції від перевантажених?

  9. Чи можуть клас- чи функція-шаблон мати більш одного родового типу даних? Якщо так, то як вони задаються?

  10. Наведіть приклад використання родової функції.

Лабораторна робота №11

Тема: Особливості розробки класів для роботи з динамічними масивами довільної розмірності з використанням стандартної бібліотеки шаблонів STL.

Мета: Набуття навичок студентами при роботі з STL.

Порядок виконання роботи

  1. Ознайомитись з теоретичною частиною даної теми.

  2. Проаналізувати структуру контейнеру VECTOR та обґрунтувати вибір методів контейнера для розв’язання задачі відповідно Завдання 1.

  3. Розробити метод з використанням контейнера VECTOR як зберігання даних заданого типу відповідно до Завдання 1.

  4. Розробити метод з використанням контейнера VECTOR як сховища об’єктів заданого типу відповідно до Завдання 1.

  5. Розробити тест для перевірки вірності даної програми.

  6. Розробити програму з використанням алгоритмів STL відповідно до Завдання 2.

  7. Оформити звіт до лабораторної роботи.