logo

Funkcie v C++

Funkcia je množina príkazov, ktoré prijímajú vstup, vykonávajú určité špecifické výpočty, a produkuje výstup. Cieľom je dať nejaké bežne alebo opakovane vykonali úlohy, aby vytvorili a funkciu takže namiesto opakovania rovnakého kódu pre rôzne vstupy môžeme zavolať túto funkciu.
Zjednodušene povedané, funkcia je blok kódu, ktorý sa spúšťa iba vtedy, keď je zavolaný.

Syntax:



Syntax funkcie

Syntax funkcie

Prí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ýkon

m is 20>

Časová zložitosť: O(1)

Zložitosť priestoru: O(1)

Prečo potrebujeme funkcie?

  • Funkcie nám pomáhajú zníženie redundancie kódu . Ak sa funkcia vykonáva na viacerých miestach v softvéri, namiesto toho, aby sme znova a znova písali rovnaký kód, vytvárame funkciu a voláme ju všade. Pomáha to aj pri údržbe, pretože ak v budúcnosti vykonáme zmeny vo funkciách, musíme vykonať zmeny iba na jednom mieste.
  • Funkcie vytvárajú kód modulárny . Predstavte si veľký súbor s mnohými riadkami kódu. Čítanie a používanie kódu sa stáva skutočne jednoduchým, ak je kód rozdelený na funkcie.
  • Funkcie poskytujú abstrakcie . Môžeme napríklad používať funkcie knižnice bez obáv o ich vnútornú prácu.

Vyhlásenie o funkcii

Deklarácia funkcie informuje kompilátor o počte parametrov, dátových typoch parametrov a vráti typ funkcie. Zápis názvov parametrov do deklarácie funkcie je voliteľný, ale je potrebné ich uviesť do definície. Nižšie je uvedený príklad deklarácií funkcií. (názvy parametrov sa nenachádzajú v nižšie uvedených deklaráciách)

Deklarácia funkcie v C++

Vyhlásenie o funkcii

Prí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 funkcií

Typy funkcií v C++

Typy funkcií v C++

Funkcia definovaná používateľom

Používateľom definované funkcie sú používateľom/zákazníkom definované bloky kódu špeciálne prispôsobené na zníženie zložitosti veľkých programov. Sú tiež bežne známe ako funkcie na mieru ktoré sú postavené len na splnenie podmienok, v ktorých používateľ čelí problémom a zároveň znižujú zložitosť celého programu.

Funkcia knižnice

Knižničné funkcie sú tiež tzv vstavané funkcie . Tieto funkcie sú súčasťou balíka kompilátora, ktorý je už definovaný a pozostáva zo špeciálnej funkcie so špeciálnym a odlišným významom. Vstavaná funkcia nám dáva výhodu, pretože ich môžeme priamo použiť bez ich definovania, zatiaľ čo v používateľsky definovanej funkcii musíme pred ich použitím deklarovať a definovať funkciu.
Napríklad: sqrt(), setw(), strcat() atď.

Odovzdávanie parametrov do funkcií

Volajú sa parametre odovzdané funkcii skutočné parametre . Napríklad v programe nižšie sú 5 a 10 skutočné parametre.
Volajú sa parametre prijaté funkciou formálne parametre . Napríklad vo vyššie uvedenom programe sú x a y formálne parametre.

Formálny parameter a skutočný parameter v C++

Formálny parameter a skutočný parameter

Existujú dva najpopulárnejšie spôsoby odovzdávania parametrov:

  1. Prejsť podľa hodnoty: Pri tejto metóde odovzdávania parametrov sa hodnoty skutočných parametrov skopírujú do formálnych parametrov funkcie. Skutočné a formálne parametre sú uložené v rôznych pamäťových miestach, takže akékoľvek zmeny vykonané vo funkciách sa neodrážajú v skutočných parametroch volajúceho.
  2. Prejsť cez referenciu: Skutočné aj formálne parametre sa vzťahujú na rovnaké miesta, takže všetky zmeny vykonané vo funkcii sa prejavia v skutočných parametroch volajúceho.

Definícia funkcie

Prejdite podľa hodnoty sa používa tam, kde hodnota x nie je upravená pomocou funkcie 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ýkon

x = 20>

Časová zložitosť: O(1)

Zložitosť priestoru: O(1)

Funkcie využívajúce ukazovatele

Funkcia fun() očakáva ukazovateľ ptr na celé číslo (alebo adresu celého čísla). Upravuje hodnotu na adrese ptr. Operátor dereferencie * sa používa na prístup k hodnote na adrese. Vo výraze ‚*ptr = 30‘ sa hodnota na adrese ptr zmení na 30. Operátor adresy & sa používa na získanie adresy premennej ľubovoľného dátového typu. V príkaze volania funkcie „fun(&x)“ sa odovzdá adresa x, takže x možno upraviť pomocou 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ýkon

x = 30>

Časová zložitosť: O(1)

Zložitosť priestoru: O(1)

Rozdiel medzi volaním podľa hodnoty a volaním odkazom v C++

Volajte podľa hodnoty Zavolajte podľa referencie
Funkcii sa odovzdá kópia hodnoty Funkcii sa odovzdá adresa hodnoty
Zmeny vykonané vo funkcii nie sú
odráža v iných funkciách
Zmeny vykonané vo funkcii sa prejavia
aj mimo funkcie
Skutočné a formálne argumenty budú vytvorené na
iné miesto v pamäti
Skutočné a formálne argumenty budú vytvorené na
rovnaké miesto v pamäti.

Body na zapamätanie funkcií v C++

1. Väčšina programov v C++ má funkciu s názvom main(), ktorú zavolá operačný systém, keď používateľ spustí program.

2. Každá funkcia má návratový typ. Ak funkcia nevracia žiadnu hodnotu, potom sa ako návratový typ použije void. Navyše, ak je návratový typ funkcie neplatný, stále môžeme použiť príkaz return v tele definície funkcie tak, že s ním nešpecifikujeme žiadnu konštantu, premennú atď., a to tak, že uvedieme iba príkaz 'return;' symbolizujú ukončenie funkcie, ako je znázornené nižšie:

C++




void> function name(>int> a)> {> >.......>// Function Body> >return>;>// Function execution would get terminated> }>

>

>

3. Na deklarovanie funkcie, ktorú možno volať len bez akéhokoľvek parametra, by sme mali použiť void zábava (void) . Ako vedľajšia poznámka, v C++ prázdny zoznam znamená, že funkciu možno volať iba bez akéhokoľvek parametra. V C++ sú void fun() aj void fun(void) rovnaké.

Hlavná funkcia

Hlavná funkcia je špeciálna funkcia. Každý program v C++ musí obsahovať funkciu s názvom main. Slúži ako vstupný bod do programu. Počítač začne spúšťať kód od začiatku hlavnej funkcie.

Typy hlavných funkcií

1. Bez parametrov:

CPP




// Without Parameters> int> main() { ...>return> 0; }>

>

>

2. S parametrami:

CPP




// With Parameters> int> main(>int> argc,>char>*>const> argv[]) { ...>return> 0; }>

>

>

Dôvodom pre voľbu parametra pre hlavnú funkciu je umožniť vstup z príkazového riadku. Keď použijete hlavnú funkciu s parametrami, uloží každú skupinu znakov (oddelenú medzerou) za názvom programu ako prvky v poli s názvom argv .
Keďže hlavná funkcia má návratový typ int , programátor musí mať v kóde vždy príkaz return. Číslo, ktoré sa vráti, sa používa na informovanie volajúceho programu, aký bol výsledok vykonania programu. Vracanie 0 signálov, že neboli žiadne problémy.

C++ rekurzia

Keď sa funkcia volá v rámci tej istej funkcie, v C++ sa nazýva rekurzia. Funkcia, ktorá volá rovnakú funkciu, je známa ako rekurzívna funkcia.
Funkcia, ktorá volá sama seba a po volaní funkcie nevykonáva žiadnu úlohu, je známa ako chvostová rekurzia. V chvostovej rekurzii vo všeobecnosti voláme rovnakú funkciu s príkazom return.
Syntax:

C++




recursionfunction()> {> >recursionfunction();>// calling self function> }>

>

>

ako previesť int na reťazec java

Ak chcete vedieť viac, pozri tento článok .

C++ odovzdávanie poľa do funkcie

V C++ môžeme na opätovné použitie logiky poľa vytvoriť funkciu. Na odovzdanie poľa funkcii v C++ musíme zadať iba názov poľa.

function_name(array_name[]);   //passing array to function>

Príklad: Vytlačte minimálny počet v danom 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ýkon

Minimum element is: 10>

Časová zložitosť: O(n) kde n je veľkosť poľa
Zložitosť priestoru: O(n) kde n je veľkosť poľa.

Preťaženie C++ (funkcia)

Ak vytvoríme dva alebo viac členov s rovnakým názvom, ale rozdielnym počtom alebo typom parametrov, je to známe ako preťaženie C++. V C++ môžeme preťažiť:

  • metódy,
  • konštruktérov a
  • indexované vlastnosti

Typy preťaženia v C++ sú:

  • Preťaženie funkcií
  • Preťaženie operátora

Preťaženie funkcií C++

Preťaženie funkcií je definované ako proces dvoch alebo viacerých funkcií s rovnakým názvom, ale odlišnými parametrami. Pri preťažení funkcií je funkcia predefinovaná pomocou rôznych typov alebo počtu argumentov. Iba prostredníctvom týchto rozdielov môže kompilátor rozlišovať medzi funkciami.
Výhodou preťaženia funkcií je, že zvyšuje čitateľnosť programu, pretože pre tú istú akciu nemusíte používať rôzne názvy.

Príklad: zmena počtu argumentov metódy 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ýkon

30 55>

Časová zložitosť: O(1)
Zložitosť priestoru: O(1)

Príklad: keď sa typ argumentov líši.

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ýkon

r1 is : 42 r2 is : 0.6>

Časová zložitosť: O(1)
Priestorová zložitosť: O(1)

Preťaženie funkcií a nejednoznačnosť

Keď sa kompilátor nedokáže rozhodnúť, ktorá funkcia sa má vyvolať z preťažených funkcií, táto situácia je známa ako nejednoznačnosť preťaženia funkcie.
Keď kompilátor zobrazí chybu nejednoznačnosti, kompilátor nespustí program.

Príčiny nejednoznačnosti:

  • Typ Konverzia.
  • Funkcia s predvolenými argumentmi.
  • Funkcia s prechodovým odkazom.

Typ konverzie:-

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>

>

>

Vyššie uvedený príklad ukazuje chybu volanie preťaženého „zábava (dvojitá)“ je nejednoznačné . Fun(10) zavolá prvú funkciu. Fun(1.2) volá druhú funkciu podľa našej predpovede. Toto sa však nevzťahuje na žiadnu funkciu ako v C++, všetky konštanty s pohyblivou rádovou čiarkou sa považujú za dvojité, nie za pohyblivé. Ak vymeníme float na dvojnásobok, program funguje. Ide teda o typovú konverziu z float na double.

Funkcia s predvolenými argumentmi:-

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>

>

>

Vyššie uvedený príklad ukazuje chybu volanie preťaženého ‘fun(int)’ je nejednoznačné . Fun(int a, int b=9) je možné volať dvoma spôsobmi: prvým je volanie funkcie s jedným argumentom, t.j. fun(12) a druhým spôsobom je volanie funkcie s dvoma argumentmi, t.j. fun(4). ,5). Funkcia fun(int i) sa vyvolá s jedným argumentom. Preto kompilátor nemohol vybrať medzi fun(int i) a fun(int a,int b=9).

Funkcia s odkazom 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>

>

>

Vyššie uvedený príklad ukazuje chybu volanie preťaženého ‘fun(int&)’ je nejednoznačné . Prvá funkcia berie jeden celočíselný argument a druhá funkcia berie referenčný parameter ako argument. V tomto prípade kompilátor nevie, ktorú funkciu potrebuje používateľ, pretože neexistuje žiadny syntaktický rozdiel medzi fun(int) a fun(int &).

Funkcia priateľa

  • Funkcia priateľa je špeciálna funkcia v C++, ktorá napriek tomu, že nie je členskou funkciou triedy, má privilégium na prístup k súkromným a chráneným údajom triedy.
  • Funkcia priateľa je nečlenská funkcia alebo bežná funkcia triedy, ktorá sa deklaruje pomocou kľúčového slova priateľ v triede. Vyhlásením funkcie za priateľa sú funkcii udelené všetky prístupové povolenia.
  • Kľúčové slovo priateľ je umiestnené iba v deklarácii funkcie, ale nie v definícii funkcie.
  • Keď sa volá funkcia priateľ, nepoužíva sa ani názov objektu, ani bodkový operátor. Môže však prijať objekt ako argument, ktorého hodnotu chce získať.
  • Funkcia priateľa môže byť deklarovaná v ktorejkoľvek sekcii triedy, tj verejná, súkromná alebo chránená.

Deklarácia funkcie priateľa v C++

Syntax:

class {   friend (argument/s); };>

Príklad_1: Nájdite najväčšie z dvoch čísel pomocou funkcie 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ýkon

Enter the first number : 789 Enter the second number : 982 Largest number is 982>