Přetížení funkcí v C ++: Vše, co potřebujete vědět



Tento článek vám poskytne podrobné a komplexní znalosti o přetížení funkcí v C ++ se spoustou příkladů k pochopení.

C ++ je jedním z těch programovacích jazyků, který je velmi flexibilní a zahrnuje také několik funkcí objektově orientovaného programování. Přetížení je další vlastností tohoto programovacího jazyka.Následující ukazatele budou popsány v tomto článku „Přetížení funkce v C ++“ -

java kód pro ukončení programu

Přetížení C ++

Když vytvoříme dva nebo více členů třídy se stejným názvem, ale odlišným počtem nebo typem parametrů, je to známé jako C ++ přetížení. V C ++ můžeme přetížit:





  • metody,
  • konstruktéři a
  • indexované vlastnosti

Typy přetížení v C ++

types-of-overloading-in-c++

Co je přetížení funkcí v C ++?

Přetížení funkce v C ++ lze definovat jako proces, který má dvě nebo více členských funkcí třídy se stejným názvem, ale odlišnými v parametrech. Při přetížení funkce lze funkci předefinovat buď pomocí různých typů argumentů, nebo jiným počtem argumentů podle požadavku. Pouze prostřednictvím těchto rozdílů může kompilátor rozlišovat mezi dvěma přetíženými funkcemi.



Jednou z hlavních výhod přetížení funkcí je to, že zvyšuje čitelnost programu, protože pro stejnou akci nemusíme znovu a znovu používat různé názvy.

Změnou počtu argumentů

V tomto způsobu přetížení funkce definujeme dvě funkce se stejnými názvy, ale s jiným počtem parametrů stejného typu. Například v níže uvedeném programu jsme vytvořili dvě funkce add () pro vrácení součtu dvou a tří celých čísel.

// definice první funkce 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 }

Zde se říká, že funkce add () je přetížená, protože má dvě definice, jednu, která přijímá dva argumenty a druhou, která přijímá tři argumenty. Která funkce add () bude volána, závisí na počtu argumentů.



int main () {add (10, 20) // add () s 2 parametry se bude jmenovat add (10, 20, 30) // sum () se 3 parametry se bude jmenovat}
#include using namespace std int add (int a, int b) {cout<< a+b <

Ve výše uvedeném příkladu přetížíme funkci add () změnou jejího počtu argumentů. Nejprve definujeme funkci add () se dvěma parametry, poté ji přetížíme opětovným definováním funkce add (), ale tentokrát se třemi parametry.

Tím, že máte různé typy argumentů

V této metodě definujeme dvě nebo více funkcí se stejným názvem a stejným počtem parametrů, ale datový typ použitý pro tyto parametry se liší. Například v tomto programu máme tři funkce add (), první dostane dva celočíselné argumenty, druhý dostane dva float argumenty a třetí dostane 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) }

Ve výše uvedeném příkladu definujeme funkci add () třikrát. Nejprve pomocí celých čísel jako parametrů, za druhé pomocí float jako parametrů a za třetí pomocí double jako parametru.
Funkci add () tedy přepíšeme dvakrát.

co je připojeno v Javě

Výhody přetížení funkce v C ++

  • Používáme přetížení funkcí, abychom ušetřili místo v paměti, konzistenci a čitelnost našeho programu.

  • S konceptem přetížení funkce použití můžeme vyvinout více než jednu funkci se stejným názvem

  • Přetížení funkce ukazuje chování polymorfismu, které nám umožňuje dosáhnout odlišného chování, i když bude existovat nějaký odkaz používající stejný název funkce.

  • Přetížení funkce zrychluje provádění programu.

  • Přetížení funkce se používá pro opětovné použití kódu a také pro úsporu paměti.

  • Pomáhá aplikaci načíst metodu třídy na základě typu parametru.

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

Nevýhody přetížení funkce v C ++

  • Deklarace funkcí, které se liší pouze svým návratovým typem, nelze přetížit procesem přetížení funkce.
  • Deklarace členské funkce se stejnými parametry nebo stejnými typy názvů nelze přetížit, pokud je některý z nich deklarován jako statická členská funkce.
  • třída XYZ {static void func () void func () // error}

Přetížení funkce a nejednoznačnost

Když kompilátor není schopen rozhodnout, kterou funkci by měl vyvolat jako první mezi přetíženými funkcemi, je tato situace známá jako dvojznačnost přetížení funkce. Kompilátor nespustí program, pokud zobrazí chybu nejednoznačnosti. Příčiny dvojznačnosti přetížení funkce:

  • Převod typu.
  • Funkce s výchozími argumenty.
  • Funkce s průchodem odkazem

Převod typu:

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

Výše uvedený příklad vyvolá chybu - „volání přetížené funkce (double) je dvojznačné“. Funkce (3.4) vyvolá první funkci. Funkce (34) volá druhou funkci podle naší predikce. Ale to se neděje, protože v C ++ jsou všechny konstanty s plovoucí desetinnou čárkou považovány za dvojité, nikoli za float. Pokud nahradíme proměnnou float dvojitou proměnnou, program bude fungovat dobře. Proto tomu říkáme chyba převodu typu z float na double.

fibonacci c ++ rekurzivní

Funkce s výchozími argumenty:

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

Výše uvedený příklad uvádí chybu, která říká „volání přetíženého„ fun (int) “je nejednoznačné”, protože funkci (int y, int z = 12) lze volat dvěma způsoby:

  1. Voláním funkce s jedním argumentem (a automaticky získá hodnotu z = 12)
  2. Voláním funkce se dvěma argumenty.

Když zavoláme funkci: funkce (12), plně vyplníme podmínku funkce (int) i funkce (int, int), čímž se kompilátor dostane do nejednoznačnosti, zobrazí chybu.

Funkce s předáním odkazem

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

Výše uvedený program uvádí chybu, která říká „volání přetíženého„ fun (int &) “je nejednoznačné“. Jak vidíme, první funkce bere jeden celočíselný argument a druhá funkce bere jako parametr referenční parametr. V tomto případě kompilátor není schopen pochopit, která funkce je pro uživatele potřebná, protože neexistuje žádný syntaktický rozdíl mezi fun (int) a fun (int &), a proto střílí chybu nejednoznačnosti.

S tímto se dostáváme na konec tohoto přetížení funkcí v C ++. Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Výcvikový a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java spolu s různými rámci Java jako Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.