Funkce je sada příkazů, které přebírají vstup, provádí nějaký konkrétní výpočet, a produkuje výstup. Cílem je vložit některé běžně nebo opakovaně dělali společně úkoly, aby a funkce takže místo opakovaného psaní stejného kódu pro různé vstupy můžeme volat tuto funkci.
Jednoduše řečeno, funkce je blok kódu, který se spouští pouze tehdy, když je volán.
Syntax:
arraylist v jazyce Java

Syntaxe funkce
Příklad:
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;> }> |
>
>Výstup
m is 20>
Časová složitost: O(1)
Složitost prostoru: O(1)
Proč potřebujeme funkce?
- Funkce nám pomáhají snížení redundance kódu . Pokud je funkce prováděna na více místech v softwaru, pak místo psaní stejného kódu znovu a znovu vytvoříme funkci a voláme ji všude. To také pomáhá při údržbě, protože pokud v budoucnu provedeme změny funkcí, musíme provést změny pouze na jednom místě.
- Funkce vytvářejí kód modulární . Představte si velký soubor s mnoha řádky kódu. Je opravdu snadné číst a používat kód, pokud je kód rozdělen do funkcí.
- Funkce poskytují abstrakce . Můžeme například používat funkce knihovny, aniž bychom se museli starat o jejich vnitřní práci.
Deklarace funkce
Deklarace funkce říká kompilátoru o počtu parametrů, datových typech parametrů a vrací typ funkce. Zápis jmen parametrů do deklarace funkce je nepovinný, ale je nutné je uvést do definice. Níže je uveden příklad deklarace funkcí. (názvy parametrů se v níže uvedených deklaracích nevyskytují)

Deklarace funkce
Příklad:
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> );> |
>
>
Typy funkcí

Typy funkcí v C++
Uživatelem definovaná funkce
Uživatelsky definované funkce jsou uživatelem/zákazníkem definované bloky kódu speciálně upravené pro snížení složitosti velkých programů. Jsou také běžně známé jako funkce na míru které jsou vytvořeny pouze pro splnění podmínek, ve kterých se uživatel potýká s problémy a zároveň snižují složitost celého programu.
Funkce knihovny
Nazývají se také funkce knihovny vestavěné funkce . Tyto funkce jsou součástí balíčku kompilátoru, který je již definován a skládá se ze speciální funkce se speciálními a odlišnými významy. Vestavěná funkce nám dává výhodu, protože je můžeme přímo používat, aniž bychom je definovali, zatímco v uživatelsky definované funkci musíme před použitím deklarovat a definovat funkci.
Například: sqrt(), setw(), strcat() atd.
Předávání parametrů do funkcí
Volají se parametry předané funkci skutečné parametry . Například v programu níže jsou 5 a 10 skutečné parametry.
Parametry přijaté funkcí jsou volány formální parametry . Například ve výše uvedeném programu jsou x a y formální parametry.

Formální parametr a skutečný parametr
Existují dva nejoblíbenější způsoby předávání parametrů:
- Předat hodnotu: V této metodě předávání parametrů se hodnoty skutečných parametrů zkopírují do formálních parametrů funkce. Skutečné a formální parametry jsou uloženy v různých paměťových místech, takže jakékoli změny provedené ve funkcích se neprojeví ve skutečných parametrech volajícího.
- Předat referenci: Skutečné i formální parametry se vztahují ke stejným umístěním, takže jakékoli změny provedené uvnitř funkce se projeví ve skutečných parametrech volajícího.
Definice funkce
Mít hodnotu se používá tam, kde se hodnota x nemění pomocí funkce 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;> }> |
>
>Výstup
x = 20>
Časová složitost: O(1)
Složitost prostoru: O(1)
Funkce využívající ukazatele
Funkce fun() očekává ukazatel ptr na celé číslo (nebo adresu celého čísla). Upravuje hodnotu na adrese ptr. Operátor dereference * se používá pro přístup k hodnotě na adrese. V příkazu ‚*ptr = 30‘ se hodnota na adrese ptr změní na 30. Operátor adresy & se používá k získání adresy proměnné libovolného datového typu. V příkazu volání funkce ‚fun(&x)‘ je předána adresa x, takže x lze upravit pomocí jeho adresy.
C++
// 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;> }> |
>
>Výstup
x = 30>
Časová složitost: O(1)
Složitost prostoru: O(1)
Rozdíl mezi voláním podle hodnoty a voláním podle odkazu v C++
Volejte podle hodnoty | Volejte podle reference |
---|---|
Kopie hodnoty je předána funkci | Funkce je předána adresa hodnoty |
Změny provedené uvnitř funkce nejsou odrazí na dalších funkcích | Změny provedené uvnitř funkce se projeví i mimo funkci |
Skutečné a formální argumenty budou vytvořeny na jiné umístění paměti | Skutečné a formální argumenty budou vytvořeny na stejné místo v paměti. |
Body k zapamatování o funkcích v C++
1. Většina programů v C++ má funkci zvanou main(), která je volána operačním systémem, když uživatel program spustí.
2. Každá funkce má návratový typ. Pokud funkce nevrací žádnou hodnotu, pak se jako návratový typ použije void. Navíc, pokud je návratový typ funkce neplatný, stále můžeme použít příkaz return v těle definice funkce tím, že s ním neuvedeme žádnou konstantu, proměnnou atd., pouze zmíníme příkaz 'return;' symbolizují ukončení funkce, jak je znázorněno níže:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
řetězec obsahuje
>
3. Chcete-li deklarovat funkci, kterou lze volat pouze bez jakéhokoli parametru, měli bychom použít void zábava (void) . Jako vedlejší poznámka, v C++ prázdný seznam znamená, že funkci lze volat pouze bez jakéhokoli parametru. V C++ jsou void fun() a void fun(void) stejné.
Hlavní funkce
Hlavní funkce je speciální funkce. Každý program v C++ musí obsahovat funkci s názvem main. Slouží jako vstupní bod pro program. Počítač začne spouštět kód od začátku hlavní funkce.
Typy hlavních funkcí
1. Bez parametrů:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
>
>
2. S parametry:
CPP
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
Důvodem volby parametru pro hlavní funkci je povolení vstupu z příkazového řádku. Když použijete hlavní funkci s parametry, uloží se každá skupina znaků (oddělená mezerou) za názvem programu jako prvky v poli s názvem argv .
Protože funkce main má návratový typ int , programátor musí mít v kódu vždy příkaz return. Vrácené číslo se používá k informování volajícího programu, jaký byl výsledek provádění programu. Vrací 0 signálů, že nebyly žádné problémy.
C++ rekurze
Když je funkce volána v rámci stejné funkce, je v C++ známá jako rekurze. Funkce, která volá stejnou funkci, je známá jako rekurzivní funkce.
Funkce, která volá sama sebe a po volání funkce neprovádí žádnou úlohu, se nazývá koncová rekurze. V koncové rekurzi obecně voláme stejnou funkci pomocí příkazu return.
Syntax:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
Chcete-li vědět více, viz tento článek .
C++ předávání pole funkci
V C++, abychom znovu použili logiku pole, můžeme vytvořit funkci. Abychom předali pole funkci v C++, musíme zadat pouze název pole.
function_name(array_name[]); //passing array to function>
Příklad: Vytiskněte minimální číslo v daném poli.
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> |
>
>Výstup
Minimum element is: 10>
Časová složitost: O(n) kde n je velikost pole
Složitost prostoru: O(n) kde n je velikost pole.
Přetížení C++ (funkce)
Pokud vytvoříme dva nebo více členů se stejným názvem, ale rozdílným počtem nebo typem parametrů, je to známé jako přetížení C++. V C++ můžeme přetížit:
binární strom mail order traversal
- metody,
- konstruktéři a
- indexované vlastnosti
Typy přetížení v C++ jsou:
- Přetížení funkcí
- Přetížení operátora
Přetížení funkcí C++
Přetížení funkcí je definováno jako proces dvou nebo více funkcí se stejným názvem, ale odlišnými parametry. Při přetížení funkcí je funkce předefinována pomocí různých typů nebo počtu argumentů. Pouze prostřednictvím těchto rozdílů může kompilátor rozlišovat mezi funkcemi.
Výhodou přetížení funkcí je, že zvyšuje čitelnost programu, protože pro stejnou akci nemusíte používat různé názvy.
Příklad: změna počtu argumentů metody 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> |
>
>Výstup
30 55>
Časová složitost: O(1)
Složitost prostoru: O(1)
Příklad: když se typ argumentů liší.
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> |
>
>Výstup
r1 is : 42 r2 is : 0.6>
Časová náročnost: O(1)
Prostorová složitost: O(1)
Přetížení funkcí a nejednoznačnost
Když se kompilátor nemůže rozhodnout, která funkce má být vyvolána z přetížené funkce, tato situace se nazývá nejednoznačnost přetížení funkce.
Když kompilátor zobrazí chybu nejednoznačnosti, kompilátor nespustí program.
Příčiny nejasností:
- Převod typu.
- Funkce s výchozími argumenty.
- Funkce s pass-by-reference.
Typ konverze:-
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> |
>
>
Výše uvedený příklad ukazuje chybu volání přetíženého ‘zábava (dvojitá)’ je nejednoznačné . Fun(10) zavolá první funkci. Fun(1.2) volá druhou funkci podle naší predikce. To však neodkazuje na žádnou funkci jako v C++, všechny konstanty s pohyblivou řádovou čárkou jsou považovány za dvojité, nikoli za plovoucí. Pokud nahradíme float na double, program funguje. Jedná se tedy o převod typu z float na double.
Funkce s výchozími argumenty:-
C++
úniková postava java
#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> |
>
>
Výše uvedený příklad ukazuje chybu volání přetíženého ‘zábava(int)’ je nejednoznačné . Fun(int a, int b=9) lze volat dvěma způsoby: prvním je volání funkce s jedním argumentem, tj. fun(12) a dalším způsobem je volání funkce se dvěma argumenty, tj. fun(4). ,5). Funkce fun(int i) se vyvolá s jedním argumentem. Proto kompilátor nemohl být schopen vybrat mezi fun(int i) a fun(int a,int b=9).
Funkce s odkazem Pass By: -
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> |
>
>
Výše uvedený příklad ukazuje chybu volání přetíženého ‘fun(int&)’ je nejednoznačné . První funkce přebírá jeden celočíselný argument a druhá funkce přebírá referenční parametr jako argument. V tomto případě kompilátor neví, kterou funkci uživatel potřebuje, protože neexistuje žádný syntaktický rozdíl mezi fun(int) a fun(int &).
Funkce přítele
- Funkce přítele je speciální funkce v C++, která navzdory tomu, že není členskou funkcí třídy, má oprávnění přistupovat k soukromým a chráněným datům třídy.
- Funkce přítele je nečlenská funkce nebo běžná funkce třídy, která je deklarována pomocí klíčového slova friend uvnitř třídy. Deklarováním funkce jako přítele jsou funkci udělena všechna přístupová oprávnění.
- Klíčové slovo friend je umístěno pouze v deklaraci funkce, ale ne v definici funkce.
- Když je volána funkce friend, není použito jméno objektu ani operátor tečky. Může však přijmout objekt jako argument, k jehož hodnotě chce získat přístup.
- Funkce přítele může být deklarována v jakékoli části třídy, tj. veřejná, soukromá nebo chráněná.
Deklarace funkce přátel v C++
Syntax:
class { friend (argument/s); };>
Příklad_1: Najděte největší ze dvou čísel pomocí funkce 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.b)> > 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;> }> |
>
>
Výstup
Enter the first number : 789 Enter the second number : 982 Largest number is 982>