Funktsiooni ülekoormamine C ++ versioonis: kõik, mida peate teadma



See artikkel annab teile üksikasjalikud ja põhjalikud teadmised funktsioonide ülekoormamise kohta C ++ versioonis koos mõistetavate koormate näidetega.

C ++ on üks neist programmeerimiskeeltest, mis on väga paindlik ja hõlmab ka objektorienteeritud programmeerimise mitmeid funktsioone. Selle programmeerimiskeele teine ​​omadus on ülekoormus.Järgmisi näpunäiteid käsitletakse selles artiklis „Funktsioonide ülekoormamine C ++ -s” -

C ++ Ülekoormus

Kui loome kaks või enam klassi liiget, kellel on sama nimi, kuid erinevad arvult või parameetrite tüübilt, on see tuntud kui C ++ ülekoormus. C ++ versioonis võime üle koormata:





  • meetodid,
  • konstruktorid ja
  • indekseeritud omadused

Ülekoormuse tüübid C ++ keeles

types-of-overloading-in-c++

Mis on funktsiooni ülekoormamine C ++ versioonis?

Funktsiooni Ülekoormust C ++ keeles saab määratleda kui protsessi, mille käigus on sama nimega, kuid parameetritelt erinevad klassi kaks või enam liikmefunktsiooni. Funktsiooni ülekoormamisel saab funktsiooni uuesti määratleda, kasutades erinevat tüüpi argumente või vastavalt nõudele erinevat argumentide arvu. Alles nende erinevuste abil saab kompilaator eristada kahte ülekoormatud funktsiooni.



Funktsioonide ülekoormamise üks peamisi eeliseid on see, et see suurendab programmi loetavust, kuna me ei pea sama toimingu jaoks ikka ja jälle erinevaid nimesid kasutama.

Argumentide arvu muutmisega

Sel funktsioonide ülekoormamise viisil määratleme kaks funktsiooni, millel on samad nimed, kuid erinev arv sama tüüpi parameetreid. Näiteks allpool mainitud programmis oleme kahe ja kolme täisarvu summa tagastamiseks teinud kaks funktsiooni add ().

// esimese funktsiooni määratlus 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 }

Siin öeldakse, et funktsioon add () on ülekoormatud, kuna sellel on kaks määratlust, millest üks aktsepteerib kahte ja teine ​​kolme argumenti. Millist funktsiooni add () kutsutakse, sõltub argumentide arvust.



int main () {add (10, 20) // add () koos 2 parameetriga nimetatakse add (10, 20, 30) // summa () 3 parameetriga kutsutakse}
#include kasutades nimeruumi std int add (int a, int b) {cout<< a+b <

Ülaltoodud näites koormame funktsiooni add () üle, muutes selle argumentide arvu. Esiteks määratleme funktsiooni add () kahe parameetriga, seejärel koormame selle üle, määrates uuesti funktsiooni add (), kuid seekord kolme parameetriga.

Erinevat tüüpi argumentide omamine

Selles meetodis määratleme kaks või enam funktsiooni, millel on sama nimi ja sama arv parameetreid, kuid nende parameetrite jaoks kasutatav andmetüüp on erinev. Näiteks on meil selles programmis kolm funktsiooni add (), esimene saab kaks täisarvu, teine ​​kaks ujukit ja kolmas kaks topeltargumenti.

#include kasutades nimeruumi std int add (int x, int y) // esimene määratlus {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) }

mis on java alamstring

Ülaltoodud näites määratleme funktsiooni add () kolm korda. Esiteks kasutatakse täisarvu parameetritena, teiseks ujukit parameetritena ja kolmandaks parameetrina topelt.
Seega alistame funktsiooni add () kaks korda.

Funktsiooni eelised Ülekoormus C ++

  • Programmi mäluruumi, järjepidevuse ja loetavuse säästmiseks kasutame funktsioonide ülekoormamist.

  • Kasutusfunktsiooni ülekoormamise kontseptsiooniga saame välja töötada rohkem kui ühe samanimelise funktsiooni

  • Funktsioonide ülekoormamine näitab polümorfismi käitumist, mis võimaldab meil saada erinevat käitumist, kuigi funktsiooni sama nime kasutamisel on mingi seos.

  • Funktsioonide ülekoormamine kiirendab programmi täitmist.

  • Funktsioonide ülekoormust kasutatakse koodi korduvkasutamiseks ja ka mälu säästmiseks.

  • See aitab rakendusel laadida klassi meetodit parameetri tüübi põhjal.

    erinevus java ülekaalulise ja ülekoormamise vahel
  • Koodihooldus on lihtne.

Funktsiooni ülekoormuse C ++ puudused

  • Funktsioonideklaratsioone, mis erinevad ainult tagasituleku tüübi järgi, ei saa funktsiooni ülekoormamise protsessiga üle koormata.
  • Liikme funktsiooni samade parameetrite või sama tüüpi nimedeklaratsioone ei saa üle koormata, kui mõni neist on deklareeritud staatilise liikme funktsioonina.
  • klass XYZ {staatiline void func () void func () // tõrge}

Funktsiooni ülekoormus ja ebaselgus

Kui kompilaator ei suuda otsustada, millist funktsiooni ta peaks ülekoormatud funktsioonide seas esimesena kasutama, nimetatakse seda olukorda funktsiooni ebamäärasuse ülekoormamiseks. Kompilaator ei käivita programmi, kui see näitab mitmetähenduslikkuse viga. Funktsiooni ebamäärasuse ülekoormamise põhjused:

  • Sisestage teisendus.
  • Funktsioon vaikeargumentidega.
  • Funktsioon viitega passiga

Tüübi teisendamine:

#include nimeruumi kasutamine standard void funktsioon (float) void funktsioon (int) void funktsioon (float x) {std :: cout<< 'Value of x is : ' <

Ülaltoodud näide viskab vea - „ülekoormatud funktsiooni (topelt) kutsumine on mitmetähenduslik”. Funktsioon (3.4) kutsub esimese funktsiooni. Funktsioon (34) kutsub meie ennustuse järgi teist funktsiooni. Kuid see ei juhtu, sest C ++ - s käsitletakse kõiki ujukoma konstandeid topeltena, mitte ujukitena. Kui asendame ujukmuutuja topeltmuutujana, töötab programm hästi. Seetõttu nimetame seda tüüpi teisendusveaks ujukist kahekordseks.

Funktsioon vaikeargumentidega:

#include nimeruumi kasutamine st void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <

Ülaltoodud näide annab vea, öeldes, et 'ülekoormatud' lõbus (int) 'kõne on mitmetähenduslik, seda seetõttu, et funktsiooni (int y, int z = 12) saab kutsuda kahel viisil:

  1. Funktsiooni ühe argumendiga kutsudes (ja see võtab automaatselt väärtuse z = 12)
  2. Kutsudes funktsiooni kahe argumendiga.

Kui kutsume funktsiooni: function (12), täidame täielikult nii funktsiooni (int) kui ka funktsiooni (int, int) tingimuse, nii et kompilaator satub mitmetähenduslikkusse, näitab viga.

Funktsioon koos viitega

#include nimeruumi kasutamine st void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

Ülaltoodud programm annab vea, öeldes, et 'ülekoormatud' lõbus (int &) 'kõne on mitmetähenduslik. Nagu näeme, võtab esimene funktsioon ühe täisarvu argumendi ja teine ​​funktsioon võtab argumendina võrdlusparameetri. Sel juhul ei suuda kompilaator aru saada, millist funktsiooni kasutaja vajab, kuna lõbu (int) ja lõbususe (int &) vahel pole süntaktilist erinevust, nii et see laseb eksituse mitmetähenduslikkuse osas.

Sellega jõuame selle funktsiooni ülekoormamise lõppu C ++ versioonis. Kui soovite rohkem teada saada, vaadake järgmist autor Edureka, usaldusväärne veebiõppe ettevõte. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud selleks, et õpetada teid nii Java põhiliste kui ka edasijõudnute kontseptsioonide jaoks koos erinevate Java-raamistikega nagu Hibernate & Spring.

Kas teil on meile küsimus? Palun mainige seda selle blogi kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.