Preťaženie funkcií v C ++: Všetko, čo potrebujete vedieť



Tento článok vám poskytne podrobné a komplexné znalosti o funkcii Overloading v jazyku C ++ s množstvom príkladov, ktorým musíte porozumieť.

C ++ je jeden z tých programovacích jazykov, ktorý je veľmi flexibilný a tiež pokrýva niekoľko funkcií objektovo orientovaného programovania. Preťaženie je ďalšou vlastnosťou tohto programovacieho jazyka.Nasledujúcim ukazovateľom sa budeme venovať v tomto článku „Preťaženie funkcií v C ++“ -

python prevádza desatinné čísla na binárne

C ++ preťaženie

Keď vytvoríme dvoch alebo viacerých členov triedy, ktorá má rovnaký názov, ale líši sa 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éri a
  • indexované vlastnosti

Typy preťaženia v C ++

types-of-overloading-in-c++

Čo je preťaženie funkcií v C ++?

Preťaženie funkcií v C ++ možno definovať ako proces, ktorý má dve alebo viac členských funkcií triedy s rovnakým názvom, ale rozdielnymi v parametroch. Pri preťažení funkcií je možné funkciu predefinovať buď použitím rôznych typov argumentov, alebo iným počtom argumentov podľa požiadavky. Iba prostredníctvom týchto rozdielov dokáže kompilátor rozlíšiť medzi dvoma preťaženými funkciami.



Jednou z hlavných výhod funkčného preťaženia je to, že zvyšuje čitateľnosť programu, pretože nemusíme opakovane používať rôzne názvy pre rovnakú akciu.

Zmenou počtu argumentov

Pri tomto spôsobe preťaženia funkcií definujeme dve funkcie s rovnakými názvami, ale rôznym počtom parametrov rovnakého typu. Napríklad v nižšie uvedenom programe sme vytvorili dve funkcie add () na vrátenie súčtu dvoch a troch celých čísel.

// definícia prvej funkcie int add (int a, int b) {cout<< a+b } // second overloaded function definition int add(int a, int b, int c) { cout << a+b+c }

Tu sa hovorí, že funkcia add () je preťažená, pretože má dve definície, jednu, ktorá prijíma dva argumenty a druhú, ktorá prijíma tri argumenty. Funkcia add (), ktorá sa bude volať, závisí od počtu argumentov.



int main () {add (10, 20) // add () s 2 parametrom sa bude volať add (10, 20, 30) // sum () s 3 parametrom sa bude volať}
#include using namespace std int add (int a, int b) {cout<< a+b <

Vo vyššie uvedenom príklade preťažujeme funkciu add () zmenou jej počtu argumentov. Najskôr definujeme funkciu add () s dvoma parametrami, potom ju preťažíme opätovným definovaním funkcie add (), tentokrát však s tromi parametrami.

Tým, že máme rôzne typy argumentov

V tejto metóde definujeme dve alebo viac funkcií s rovnakým názvom a rovnakým počtom parametrov, ale dátový typ použitý pre tieto parametre je odlišný. Napríklad v tomto programe máme tri funkcie add (), prvý získa dva celočíselné argumenty, druhý získa dva float argumenty a tretí dva dvojité argumenty.

#include using namespace std int add (int x, int y) // first definition {cout<< x+y << endl return 0 } float add(float a, float b) { cout << a+b << endl return 0 } double add(double x, double y) { cout << x+y << endl return 0 } int main() { add(20, 40) add(23.45f, 34.5f) add(40.24, 20.433) }

Vo vyššie uvedenom príklade definujeme funkciu add () trikrát. Najskôr sa ako parametre použijú celé čísla, ako druhé sa ako parametre použije plavák a ako tretie sa ako parameter použije dvojité.
Takto dvakrát prepíšeme funkciu add ().

ako používať parametre v tablo

Výhody preťaženia funkcie v C ++

  • Preťaženie funkcií používame na šetrenie miesta v pamäti, konzistencie a čitateľnosti nášho programu.

  • S konceptom preťaženia funkcie použitia môžeme vyvinúť viac ako jednu funkciu s rovnakým názvom

  • Preťaženie funkcií ukazuje správanie polymorfizmu, ktoré nám umožňuje dosiahnuť odlišné správanie, aj keď bude existovať nejaký odkaz používajúci rovnaký názov funkcie.

  • Preťaženie funkcií urýchľuje vykonávanie programu.

  • Preťaženie funkcií sa používa na opätovné použitie kódu a tiež na úsporu pamäte.

  • Pomáha aplikácii načítať metódu triedy na základe typu parametra.

  • Údržba kódu je jednoduchá.

Nevýhody funkcie Preťaženie v C ++

  • Deklarácie funkcií, ktoré sa líšia iba svojim návratovým typom, nemožno preťažiť procesom preťaženia funkcií.
  • Deklarácie členských funkcií s rovnakými parametrami alebo rovnakými typmi mien nemožno preťažiť, ak je ktorákoľvek z nich deklarovaná ako statická členská funkcia.
  • trieda XYZ {static void func () void func () // error}

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

Keď kompilátor nie je schopný rozhodnúť, ktorú funkciu by mal medzi preťaženými funkciami vyvolať ako prvý, táto situácia sa nazýva nejednoznačnosť preťaženia funkcií. Kompilátor nespustí program, ak vykazuje chybu nejednoznačnosti. Príčiny nejasnosti preťaženia funkcií:

  • Konverzia typu.
  • Funkcia s predvolenými argumentmi.
  • Funkcia s referenciou pass by

Konverzia typu:

#include using namespace std void function (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <

Vyššie uvedený príklad vyvolá chybu - „volanie preťaženej‘ funkcie (double) ‘je nejednoznačné”. Funkcia (3.4) vyvolá prvú funkciu. Funkcia (34) volá druhú funkciu podľa našej predikcie. Toto sa ale nestane, pretože v C ++ sú všetky konštanty s pohyblivou rádovou čiarkou považované za dvojité, nie za float. Ak nahradíme premennú float dvojitou premennou, program bude fungovať dobre. Preto tomu hovoríme chyba konverzie typu z float na double.

rozdiel medzi prepísaním a preťažením v Jave

Funkcia s predvolenými argumentmi:

#include using namespace std void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <

Vyššie uvedený príklad uvádza chybu, ktorá hovorí, že „volanie preťaženej funkcie„ fun (int) “je nejednoznačné“, pretože funkciu (int y, int z = 12) možno nazvať dvoma spôsobmi:

  1. Zavolaním funkcie pomocou jedného argumentu (a automaticky získa hodnotu z = 12)
  2. Zavolaním funkcie dvoma argumentmi.

Keď zavoláme funkciu: funkcia (12), naplníme podmienku funkcie (int) aj funkcie (int, int), čím sa kompilátor dostane do nejednoznačnosti, zobrazí chybu.

Funkcia s prechodom odkazom

#include using namespace std void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

Vyššie uvedený program poskytuje chybu, ktorá hovorí, že „volanie preťaženej„ zábavy (int &) “je nejednoznačné“. Ako vidíme, prvá funkcia berie jeden celočíselný argument a druhá funkcia berie ako argument referenčný parameter. V tomto prípade kompilátor nie je schopný pochopiť, ktorú funkciu používateľ potrebuje, pretože medzi zábavou (int) a zábavou (int &) nie je syntaktický rozdiel, a preto spôsobí chybu nejednoznačnosti.

Týmto sa dostávame na koniec tohto funkčného preťaženia v C ++. Ak sa chcete dozvedieť viac, pozrite si Edureka, dôveryhodná online vzdelávacia spoločnosť. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je navrhnutý tak, aby vás vyškolil na základné aj pokročilé koncepty Java spolu s rôznymi rámcami Java, ako je Hibernate & Spring.

Máte na nás otázku? Uveďte to prosím v sekcii komentárov tohto blogu a my sa vám ozveme čo najskôr.