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