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

Синтаксис функції
приклад:
C++
// C++ Program to demonstrate working of a function> #include> using> namespace> std;> // Following function that takes two parameters 'x' and 'y'> // as input and returns max of two input numbers> int> max(> int> x,> int> y)> {> > if> (x>y)> > return> x;> > else> > return> y;> }> // main function that doesn't receive any parameter and> // returns integer> int> main()> {> > int> a = 10, b = 20;> > // Calling above function to find max of 'a' and 'b'> > int> m = max(a, b);> > cout <<> 'm is '> << m;> > return> 0;> }> |
>
>Вихід
m is 20>
Часова складність: О(1)
Складність простору: О(1)
Навіщо нам потрібні функції?
- Функції допомагають нам у цьому зменшення надмірності коду . Якщо функціональність виконується в кількох місцях програмного забезпечення, тоді замість того, щоб писати той самий код знову і знову, ми створюємо функцію та викликаємо її всюди. Це також допомагає в обслуговуванні, оскільки ми повинні вносити зміни лише в одному місці, якщо ми вносимо зміни до функціональності в майбутньому.
- Функції створюють код модульний . Розглянемо великий файл, що містить багато рядків коду. Читати та використовувати код стає дуже просто, якщо код розділити на функції.
- Функції забезпечують абстракція . Наприклад, ми можемо використовувати бібліотечні функції, не турбуючись про їх внутрішню роботу.
Оголошення функції
Оголошення функції повідомляє компілятору про кількість параметрів, типи даних параметрів і тип функції, що повертається. Написання імен параметрів в оголошенні функції необов’язкове, але їх необхідно вказати у визначенні. Нижче наведено приклад оголошення функцій. (назви параметрів відсутні в наведених нижче оголошеннях)

Оголошення функції
приклад:
C++
// C++ Program to show function that takes> // two integers as parameters and returns> // an integer> int> max(> int> ,> int> );> // A function that takes an int> // pointer and an int variable> // as parameters and returns> // a pointer of type int> int> * swap(> int> *,> int> );> // A function that takes> // a char as parameter and> // returns a reference variable> char> * call(> char> b);> // A function that takes a> // char and an int as parameters> // and returns an integer> int> fun(> char> ,> int> );> |
>
>
Типи функцій

Типи функцій у C++
Функція, визначена користувачем
Визначені користувачем функції — це визначені користувачем або клієнтом блоки коду, спеціально налаштовані для зменшення складності великих програм. Вони також широко відомі як індивідуальні функції які створені лише для задоволення умов, у яких користувач стикається з проблемами, водночас зменшуючи складність усієї програми.
Функція бібліотеки
Бібліотечні функції також називаються вбудовані функції . Ці функції є частиною пакета компілятора, який уже визначено та складається зі спеціальної функції з особливим та іншим значенням. Вбудовані функції дають нам перевагу, оскільки ми можемо використовувати їх безпосередньо, не визначаючи їх, тоді як у визначеній користувачем функції ми повинні оголосити та визначити функцію перед їх використанням.
Наприклад: sqrt(), setw(), strcat() тощо.
Передача параметрів у функції
Викликаються параметри, передані функції фактичні параметри . Наприклад, у наведеній нижче програмі 5 і 10 є фактичними параметрами.
Параметри, отримані функцією, викликаються формальні параметри . Наприклад, у наведеній вище програмі x і y є формальними параметрами.

Формальний параметр і фактичний параметр
Існує два найпопулярніших способи передачі параметрів:
- Передача за значенням: У цьому методі передачі параметрів значення фактичних параметрів копіюються до формальних параметрів функції. Фактичні та формальні параметри зберігаються в різних місцях пам’яті, тому будь-які зміни, внесені у функції, не відображаються у фактичних параметрах програми, що викликає.
- Передайте посилання: І фактичні, і формальні параметри відносяться до тих самих місць, тому будь-які зміни, внесені всередині функції, відображаються у фактичних параметрах викликаючого.
Визначення функції
Перейти за значенням використовується там, де значення x не змінюється за допомогою функції fun().
C++
// C++ Program to demonstrate function definition> #include> using> namespace> std;> void> fun(> int> x)> {> > // definition of> > // function> > x = 30;> }> int> main()> {> > int> x = 20;> > fun(x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
>Вихід
x = 20>
Часова складність: О(1)
Складність простору: О(1)
Функції з використанням покажчиків
Функція fun() очікує вказівник ptr на ціле число (або адресу цілого числа). Він змінює значення за адресою ptr. Оператор розіменування * використовується для доступу до значення за адресою. У операторі «*ptr = 30» значення адреси ptr змінюється на 30. Оператор адреси & використовується для отримання адреси змінної будь-якого типу даних. У операторі виклику функції «fun(&x)» адреса x передається, щоб x можна було змінити за допомогою його адреси.
C++
глобальна змінна в js
// C++ Program to demonstrate working of> // function using pointers> #include> using> namespace> std;> void> fun(> int> * ptr) { *ptr = 30; }> int> main()> {> > int> x = 20;> > fun(&x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
>Вихід
x = 30>
Часова складність: О(1)
Складність простору: О(1)
Різниця між викликом за значенням і викликом за посиланням у C++
Виклик за значенням | Телефонуйте за посиланням |
---|---|
Копія значення передається у функцію | Функції передається адреса значення |
Зміни, зроблені всередині функції, не є відбивається на інших функціях | Відображаються зміни, зроблені всередині функції також поза функцією |
Фактичні та формальні аргументи будуть створені на інше розташування пам'яті | Фактичні та формальні аргументи будуть створені на те саме місце пам’яті. |
Варто пам’ятати про функції в C++
1. Більшість програм C++ мають функцію під назвою main(), яка викликається операційною системою, коли користувач запускає програму.
2. Кожна функція має тип повернення. Якщо функція не повертає жодного значення, тоді як тип повернення використовується void. Більше того, якщо тип повернення функції недійсний, ми все ще можемо використовувати оператор return у тілі визначення функції, не вказуючи з ним жодної константи, змінної тощо, згадавши лише оператор return; символізують завершення функції, як показано нижче:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
>
3. Щоб оголосити функцію, яку можна викликати лише без будь-яких параметрів, ми повинні використовувати порожня веселоща (порожня) . До речі, у C++ порожній список означає, що функцію можна викликати лише без параметрів. У C++ void fun() і void fun(void) однакові.
Основна функція
Основна функція — це спеціальна функція. Кожна програма C++ повинна містити функцію під назвою main. Він служить точкою входу для програми. Комп’ютер почне виконувати код із початку основної функції.
Види основних функцій
1. Без параметрів:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
>
>
2. З параметрами:
CPP
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
Причина наявності опції параметра для функції main полягає в дозволі введення з командного рядка. Коли ви використовуєте функцію main з параметрами, вона зберігає кожну групу символів (відокремлених пробілом) після назви програми як елементи в масиві з назвою argv .
Оскільки функція main має тип повернення внутр , програміст завжди повинен мати оператор return у коді. Повернене число використовується для того, щоб повідомити викликаючій програмі, яким був результат виконання програми. Повернення 0 означає, що проблем не було.
Рекурсія C++
Коли функція викликається в одній функції, це називається рекурсією в C++. Функція, яка викликає ту саму функцію, відома як рекурсивна функція.
Функція, яка викликає сама себе і не виконує жодних завдань після виклику функції, відома як хвостова рекурсія. У хвостовій рекурсії ми зазвичай викликаємо ту саму функцію оператором return.
Синтаксис:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
Щоб дізнатися більше див Ця стаття .
C++ Передача масиву у функцію
У C++, щоб повторно використовувати логіку масиву, ми можемо створити функцію. Щоб передати масив функції в C++, нам потрібно надати лише ім’я масиву.
function_name(array_name[]); //passing array to function>
Приклад: вивести мінімальне число в заданому масиві.
C++
#include> using> namespace> std;> void> printMin(> int> arr[5]);> int> main()> {> > int> ar[5] = { 30, 10, 20, 40, 50 };> > printMin(ar);> // passing array to function> }> void> printMin(> int> arr[5])> {> > int> min = arr[0];> > for> (> int> i = 0; i <5; i++) {> > if> (min>arr[i]) {> > min = arr[i];> > }> > }> > cout <<> 'Minimum element is: '> << min <<> '
'> ;> }> // Code submitted by Susobhan Akhuli> |
>
>Вихід
Minimum element is: 10>
Часова складність: O(n), де n - розмір масиву
Складність простору: O(n), де n - розмір масиву.
для циклів java
Перевантаження C++ (функція)
Якщо ми створюємо два або більше членів з однаковими іменами, але різними за кількістю або типом параметрів, це називається перевантаженням C++. У C++ ми можемо перевантажити:
- методи,
- конструктори і
- індексовані властивості
Типи перевантаження в C++:
- Перевантаження функцій
- Перевантаження оператора
Перевантаження функцій C++
Перевантаження функцій визначається як процес наявності двох або більше функцій з однаковими назвами, але різними параметрами. У разі перевантаження функції функція перевизначається шляхом використання інших типів або кількості аргументів. Лише через ці відмінності компілятор може розрізнити функції.
Перевага перевантаження функцій полягає в тому, що воно покращує читабельність програми, оскільки вам не потрібно використовувати різні імена для однієї дії.
Приклад: зміна кількості аргументів методу add().
C++
// program of function overloading when number of arguments> // vary> #include> using> namespace> std;> class> Cal {> public> :> > static> int> add(> int> a,> int> b) {> return> a + b; }> > static> int> add(> int> a,> int> b,> int> c)> > {> > return> a + b + c;> > }> };> int> main(> void> )> {> > Cal C;> // class object declaration.> > cout << C.add(10, 20) << endl;> > cout << C.add(12, 20, 23);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>Вихід
30 55>
Часова складність: О(1)
Складність простору: О(1)
Приклад: коли типи аргументів відрізняються.
C++
// Program of function overloading with different types of> // arguments.> #include> using> namespace> std;> int> mul(> int> ,> int> );> float> mul(> float> ,> int> );> int> mul(> int> a,> int> b) {> return> a * b; }> float> mul(> double> x,> int> y) {> return> x * y; }> int> main()> {> > int> r1 = mul(6, 7);> > float> r2 = mul(0.2, 3);> > cout <<> 'r1 is : '> << r1 << endl;> > cout <<> 'r2 is : '> << r2 << endl;> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>Вихід
r1 is : 42 r2 is : 0.6>
Часова складність: О(1)
Космічна складність: О(1)
Перевантаження та неоднозначність функцій
Коли компілятор не може вирішити, яку функцію слід викликати серед перевантажених функцій, ця ситуація відома як неоднозначність перевантаження функції.
Коли компілятор показує помилку неоднозначності, компілятор не запускає програму.
Причини неоднозначності:
- Перетворення типу.
- Функція з аргументами за замовчуванням.
- Функція з переходом за посиланням.
Перетворення типу: -
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> float> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> float> j)> {> > cout <<> 'Value of j is : '> << j << endl;> }> int> main()> {> > fun(12);> > fun(1.2);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
Наведений вище приклад демонструє помилку назва перевантаженого ‘fun(double)’ неоднозначна . Fun(10) викличе першу функцію. Fun(1.2) викликає другу функцію згідно з нашим прогнозом. Але це не стосується жодної функції, оскільки в C++ усі константи з плаваючою комою розглядаються як double, а не як float. Якщо ми замінимо float на double, програма працює. Таким чином, це перетворення типу з float на double.
Функція з аргументами за замовчуванням:-
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> ,> int> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> int> a,> int> b = 9)> {> > cout <<> 'Value of a is : '> << a << endl;> > cout <<> 'Value of b is : '> << b << endl;> }> int> main()> {> > fun(12);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
Наведений вище приклад демонструє помилку виклик перевантаженого 'fun(int)' неоднозначний . Функцію fun(int a, int b=9) можна викликати двома способами: спочатку викликом функції з одним аргументом, наприклад, fun(12), а іншим способом є виклик функції з двома аргументами, тобто fun(4). ,5). Функція fun(int i) викликається з одним аргументом. Таким чином, компілятор не міг вибрати між fun(int i) та fun(int a,int b=9).
Функція з передачею за посиланням:-
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> &);> int> main()> {> > int> a = 10;> > fun(a);> // error, which fun()?> > return> 0;> }> void> fun(> int> x) { cout <<> 'Value of x is : '> << x << endl; }> void> fun(> int> & b)> {> > cout <<> 'Value of b is : '> << b << endl;> }> // Code Submitted By Susobhan Akhuli> |
>
>
Наведений вище приклад демонструє помилку виклик перевантаженого 'fun(int&)' неоднозначний . Перша функція приймає один цілочисельний аргумент, а друга функція приймає параметр посилання як аргумент. У цьому випадку компілятор не знає, яка функція потрібна користувачеві, оскільки немає синтаксичної різниці між fun(int) і fun(int &).
Функція друга
- Функція друга — це спеціальна функція в C++, яка, незважаючи на те, що не є функцією-членом класу, має привілей доступу до приватних і захищених даних класу.
- Функція friend — це функція, яка не є членом, або звичайна функція класу, яка оголошується за допомогою ключового слова friend всередині класу. Оголошуючи функцію як друга, усі права доступу надаються функції.
- Ключове слово friend розміщується лише в декларації функції, але не у визначенні функції.
- Під час виклику функції друга не використовується ні ім’я об’єкта, ні оператор крапки. Однак він може прийняти об’єкт як аргумент, до значення якого він хоче отримати доступ.
- Функцію друга можна оголосити в будь-якому розділі класу, тобто загальнодоступному, приватному або захищеному.
Оголошення функції друга в C++
Синтаксис:
class { friend (argument/s); };>
Приклад_1: знайдіть найбільше з двох чисел за допомогою функції Friend
C++
#include> using> namespace> std;> class> Largest {> > int> a, b, m;> public> :> > void> set_data();> > friend> void> find_max(Largest);> };> void> Largest::set_data()> {> > cout <<> 'Enter the first number : '> ;> > cin>> a;> > cout <<> '
Enter the second number : '> ;> > cin>> b;> }> void> find_max(Largest t)> {> > if> (t.a>т.б)> > t.m = t.a;> > else> > t.m = t.b;> > cout <<> '
Largest number is '> << t.m;> }> int> main()> {> > Largest l;> > l.set_data();> > find_max(l);> > return> 0;> }> |
>
>
Вихід
Enter the first number : 789 Enter the second number : 982 Largest number is 982>