Preopterećenje funkcije u C ++-u: Sve što trebate znati



Ovaj će vam članak pružiti detaljno i sveobuhvatno znanje o preopterećenju funkcija u C ++ s hrpom primjera koje treba razumjeti.

C ++ je jedan od onih programskih jezika koji je vrlo fleksibilan i obuhvaća nekoliko značajki objektno orijentiranog programiranja. Preopterećenje je još jedna značajka ovog programskog jezika.Slijedeće upute bit će obrađene u ovom članku „Preopterećenje funkcije u C ++“ -

C ++ Preopterećenje

Kada stvorimo dva ili više članova klase s istim imenom, ali različitim po broju ili vrsti parametara, to je poznato kao preopterećenje C ++. U C ++-u možemo preopteretiti:





  • metode,
  • konstruktori, i
  • indeksirana svojstva

Vrste preopterećenja u C ++

types-of-overloading-in-c++

Što je preopterećenje funkcije u C ++?

Preopterećenje funkcije u C ++-u može se definirati kao proces posjedovanja dvije ili više funkcija člana klase s istim imenom, ali različitim parametrima. U preopterećenju funkcije, funkcija se može redefinirati korištenjem različitih vrsta argumenata ili različitog broja argumenata prema zahtjevu. Samo putem ovih razlika kompajler može razlikovati dvije preopterećene funkcije.



Jedna od glavnih prednosti preopterećenja funkcije je što povećava čitljivost programa jer ne trebamo uvijek iznova koristiti različite nazive za istu radnju.

Promjenom broja argumenata

Na ovaj način preopterećenja funkcije definiramo dvije funkcije s istim imenima, ali različitim brojem parametara istog tipa. Na primjer, u dolje spomenutom programu napravili smo dvije funkcije add () za vraćanje zbroja dviju i tri cjelobrojne vrijednosti.

// prva definicija funkcije 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 }

Ovdje se kaže da je funkcija add () preopterećena jer ima dvije definicije, jednu koja prihvaća dva argumenta i drugu koja prihvaća tri argumenta. Koja će se funkcija add () pozvati, ovisi o broju argumenata.



int main () {add (10, 20) // add () s 2 parametra zvat će se add (10, 20, 30) // pozvat će se sum () s 3 parametra}
#include using namespace std int add (int a, int b) {cout<< a+b <

U gornjem primjeru preopterećujemo funkciju add () promjenom broja argumenata. Prvo definiramo funkciju add () s dva parametra, zatim je preopterećujemo definiranjem funkcije add (), ali ovaj put s tri parametra.

Imajući različite vrste argumenata

Ovom metodom definiramo dvije ili više funkcija s istim imenom i istim brojem parametara, ali vrsta podataka koja se koristi za te parametre je različita. Na primjer, u ovom programu imamo tri funkcije add (), prva dobiva dva cjelobrojna argumenta, druga dva plutajuća argumenta, a treća dva dvostruka argumenta.

#include using namespace std int add (int x, int y) // prva definicija {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) }

U gornjem primjeru definiramo funkciju add () tri puta. Prvo koristi cijele brojeve kao parametre, drugo koristi float kao parametre i treće koristi double kao parametar.
Tako dva puta nadjačavamo funkciju add ().

Prednosti preopterećenja funkcije u C ++

  • Preopterećenje funkcija koristimo kako bismo uštedjeli prostor u memoriji, dosljednost i čitljivost našeg programa.

  • S konceptom preopterećenja funkcije upotrebe možemo razviti više funkcija s istim imenom

  • Preopterećenje funkcije pokazuje ponašanje polimorfizma koje nam omogućuje različito ponašanje, iako će postojati neka veza koja koristi isto ime funkcije.

  • Preopterećenje funkcije ubrzava izvršavanje programa.

  • Preopterećenje funkcije koristi se za ponovnu upotrebu koda i također za uštedu memorije.

  • Pomaže aplikaciji da učita metodu klase na temelju vrste parametra.

  • Održavanje koda je jednostavno.

Mane preopterećenja funkcije u C ++

  • Deklaracije funkcija koje se razlikuju samo po svom povratnom tipu ne mogu se preopteretiti postupkom preopterećenja funkcije.
  • Deklaracije funkcije člana s istim parametrima ili istim tipovima imena ne mogu se preopteretiti ako je bilo koja od njih deklarirana kao statička funkcija člana.
  • klasa XYZ {statička void func () void func () // pogreška}

Preopterećenje funkcije i dvosmislenost

Kada kompajler ne može odlučiti koju funkciju bi trebao prvo pozvati među preopterećenim funkcijama, ta je situacija poznata kao dvosmislenost preopterećenja funkcije. Prevoditelj ne pokreće program ako pokazuje pogrešku dvosmislenosti. Uzroci dvosmislenosti preopterećenja funkcije:

  • Pretvorba tipa.
  • Funkcija sa zadanim argumentima.
  • Funkcija s prosljeđivanjem reference

Pretvorba tipa:

#include pomoću prostora imena std void funkcija (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <

Gornji primjer baca pogrešku - „poziv preopterećene‘ funkcije (dvostruko) ’je dvosmislen”. Funkcija (3.4) pozvat će prvu funkciju. Funkcija (34) poziva drugu funkciju prema našem predviđanju. Ali to se ne događa jer se u C ++-u sve konstante s pomičnom zarezom tretiraju kao dvostruke, a ne kao float. Ako varijablu float zamijenimo dvostrukom varijablom, program će raditi u redu. Stoga ovo nazivamo pogreškom pretvorbe tipa iz float u double.

Funkcija sa zadanim argumentima:

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

Gornji primjer daje pogrešku koja kaže da je „poziv preopterećene‘ zabave (int) ’dvosmislen”, jer se funkcija (int y, int z = 12) može pozvati na dva načina:

  1. Pozivanjem funkcije s jednim argumentom (i ona će automatski poprimiti vrijednost z = 12)
  2. Pozivom funkcije s dva argumenta.

Kada zovemo funkciju: function (12), u potpunosti ispunjavamo uvjet i funkcije (int) i funkcije (int, int), tako da kompajler ulazi u dvosmislenost i pokazuje pogrešku.

Funkcija s prosljeđivanjem reference

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

Gornji program daje pogrešku rekavši da je 'poziv preopterećene' zabave (int &) 'dvosmislen'. Kao što vidimo, prva funkcija uzima jedan cijeli broj, a druga funkcija uzima referentni parametar kao argument. U ovom slučaju, kompajler ne može razumjeti koja je funkcija potrebna korisniku jer ne postoji sintaksička razlika između zabave (int) i zabave (int &), tako da otklanja pogrešku dvosmislenosti.

Ovim smo došli do kraja ovog preopterećenja funkcije u C ++. Ako želite saznati više, pogledajte Edureka, pouzdane tvrtke za internetsko učenje. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA osmišljen je kako bi vas osposobio za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga i javit ćemo vam se što je prije moguće.

android studio tutorial za početnike