Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л6. Функц_ї в мов_ С++.doc
Скачиваний:
3
Добавлен:
21.09.2019
Размер:
102.4 Кб
Скачать

Перевантаження функцій

Перевантаження функцій -це використання функцій з одними і тими самими іменами, але з різними типами параметрів. Інша назва цього явища – поліморфізм. Компілятор визначає, яку саме функцію треба виконати по типу параметрів:

int max (int, int);

char * max (char *, char *); // повертає рядок найбільшої довжини

int max (int, char *); // повертає найбільше з першого параметру і довжини другого;

int max (char*, int); // повертає найбільше з довжини першого і другого

void f (int a, int b, char *c, char *d)

{cout << max (a,b) << max (c,d) << max (a,c) << max (d,b); }

Функція main()з параметрами

Функція main() може повертати значення в зовнішнє середовище, а може і не повертати, може і набувати значення із зовнішнього середовища. Тобто, як і будь-які інші функції у С++ функція main може мати аргументи, які називаються аргументами командного рядка. Їх зазначають під час запуску програми (exe-файлу) у командному рядку ОС.

Загальний вигляд функції <тип> main (int argc, char *argv[])

де argc – кількість вхідних параметрів + 1 (назва програми теж вважається параметром); argv – масив вказівників на параметри

0 1 2 3

g:\ cpp \ main.exe one two three 

argc = 4

# include <iostream.h>

void main (int argc, char *argv[ ])

{ for (int i=0; i<argc; i++)

cout << argv[i] << ’ \n’;

}

g:\ cpp\ main.exe

one

two

three

Шаблони функцій

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

Можливі варіанти:

  • передавати у функцію вказівники на дані і розмір даних;

  • використовувати перевантажені функції;

  • використання шаблонів з метою уникнення дублювання.

В С++ для цього використовуються шаблони і класи. За допомогою шаблону можна означити алгоритм, який буде застосовуватись до даних різних типів, але конкретний тип даних буде передаватися у функцію у вигляді параметра. Компілятор автоматично генерує правильний код, який відповідає переданому типу, таким чином створюється функція, яка сама себе перевантажує. Це називається неявним створенням екземпляра шаблона. Тип даних, з яким буде працювати функція, вибирає сама функція.

шаблон

Template <Class TypeName> — заголовок

{

довільне ім’я, через яке під час виклику буде передане ім’я конкретного типу

/*тіло функції */ }

Приклад. Сортування масиву із n елементів довільного типу.

Template <Class Type> void sort_vybir (type *b, int n)

{ Type d; // проміжна змінна

for (int i=0; i<n; i++)

{ int imin = i;

for (int j=i+1; j<n; j++)

if b[j] < b[imin] imin=j;

d = b[i]; b[i] = b[imin]; b[imin] =d; }

}

const n=20;

int b[n];

.... // введення масиву b;

sort_vybir (b,n);

double a[] = {0, 3, -5,…..}

sort_vybir (a,10);