Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
КІ-12

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська політехніка» Звіт: «Лабораторна робота № 9 шаблони» Підготував: Ст.гр. КІ-12 Гусєв А.О. Перевірив: Цигилик Л.О. Львів 2008 Лабораторна робота № 9 Шаблони Мета роботи: Короткі теоретичні відомості Шаблони являють собою схематичний опис побудови класів та функцій. Використовуючи шаблони, з'являється можливість створювати узагальнені специфікації для класів та функцій, що найчастіше носять назву параметризованих класів (generic classes) та параметризованих функцій (generic functions). Таким чином, за допомогою реалізації узагальнених функцій можна зменшити розмір та складність програми. Особливо корисними шаблони є саме в бібліотеках класів – тут вони вказують програмісту необхідні специфікації, приховуючи при цьому деталі справжньої реалізації. Параметризовані функції Для виконання схожих операцій над різними типами даних часто використовуються перевантажені функції. Якщо ж для кожного типу даних повинні виконуватися ідентичні операції, то більш компактним і зручним рішенням є використання параметризованих (шаблонних) функцій. При цьому програміст повинен написати лише один опис шаблона функції. Базуючись на типах аргументів, використаних при виклику цієї функції, компілятор буде автоматично генерувати об'єктні коди функцій, що оброблятимуть кожен тип даних. Параметризовані функції декларуються за допомогою ключового слова template. Це слово використовується для створення шаблону (каркасу), що в загальних рисах описує призначення функції та надає опис операцій – сутність алгоритму, що може застосовуватися до даних різних типів. Загальна форма функції-шаблону матиме вигляд: temрlate <class T1, class T2, …, class Tn> тип ім'яФункції (параметри) {     // тіло функції }         За ключовим словом template слідує не порожній список параметрів шаблону, який складається з ідентифікаторів T, кожному з яких передує ключове слово class. Коли компілятор створюватиме конкретну версію функції, то автоматично замінить параметри конкретними типами даних. Цей процес носить назву інстанціювання шаблону. Кожен формальний параметр з опису шаблона функції повинен з'явитися в списку параметрів функції принаймні один раз. Ім'я формального параметра може використовуватися в списку параметрів заголовка шаблона тільки один раз. Те ж ім'я формального параметра шаблона функції може використовуватися декількома шаблонами. Шаблон функції може бути перевантажений, а саме можна визначити інші шаблони, що мають те ж ім'я функції, але різні набори параметрів. А можна ввести не шаблонну функцію з тим же ім'ям та іншим набором параметрів функції. Компілятор виконує процес узгодження, щоб визначити, який екземпляр функції відповідає конкретному викликові. Спочатку компілятор намагається знайти і використати функцію, що точно відповідає по імені та типам параметрів функції, що викликається. Якщо на цьому етапі компілятор зазнає невдачі, то він шукає шаблон функції, за допомогою якого він може згенерувати параметризовану функцію з точною відповідністю типів параметрів та імені функції; автоматичне перетворення типів не забезпечується. І як останню спробу, компілятор послідовно виконує процес підбору перевантаженої функції. Текст програми: #include<iostream.h> #include<stdlib.h> #include <math.h> #include<conio.h> int array[4]; template<class T, int size> class matr { friend ostream& operator<< (ostream& output, matr <T,size>& arr); T ptr[size][size]; public: matr ( ){ for(int i = 0 ; i < size; i++) for(int j = 0; j < size; j++) { ptr[i][j] = 0; } }; ~matr (){ }; void Zapovnennya(int num); T Sum(); }; template <class T, int size> void matr <T,size>::Zapovnennya(int num) { for(int i = 0; i < size; i++) for(int j = 0; j < size; j++) { cout<<"arr["<<i+1<<"]["<<j+1<<"]="; cin>>ptr[i][j]; } } template<class T, int size> T matr <T,size>::Sum() { T sum = 0; for(int i=0;i<size;i++) for(int j=0;j<size;j++) if(ptr[i][j]==0) { for(int k=0;k<size;k++) if(ptr[i][k]<0) sum++; array[i]=sum; sum=0; } return 0; } template <class T,int size> ostream& operator<< (ostream& output, matr <T,size>& arr) { for(int i = 0; i < size; i++) { output << arr.ptr[i] << " "; } output << endl; return output; } void main() { matr <int,4> iarr; iarr.Zapovnennya(4); iarr.Sum(); for(int i=0;i<4;i++) if(array[i]!=0) cout << "Sum["<<i<<"] = "<<array[i] <<endl; else cout << "Sum["<<i<<"] = no result"<<endl; getch(); } ВИСНОВОК: Я навчився працювати з шаблонами.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!