Funkcijos perkrova C ++: viskas, ką reikia žinoti

Šis straipsnis suteiks jums išsamias ir išsamias žinias apie funkcijų perkrovą C ++ versijoje ir gausybę suprantamų pavyzdžių.

C ++ yra viena iš tų programavimo kalbų, kuri yra labai lanksti ir ji taip pat apima keletą objektinio programavimo funkcijų. Perkrovimas yra dar viena šios programavimo kalbos ypatybė.Sekantys rodikliai bus aptarti šiame straipsnyje „Funkcijų perkrova C ++“ -

C ++ Perkrovimas

Kai sukursime du ar daugiau klasės narių, turinčių tą patį pavadinimą, bet skirtingus parametrų skaičiumi ar tipu, tai vadinama C ++ perkrova. C ++ versijoje galime perkrauti:





rekursinis fibonacci c ++
  • metodai,
  • konstruktoriai ir
  • indeksuojamos savybės

Perkrovos tipai C ++

types-of-overloading-in-c++

Kas yra funkcijos perkrova C ++?

Funkcijos perkrova C ++ gali būti apibrėžiama kaip procesas, kai dvi ar daugiau klasės narių funkcijos turi tą patį pavadinimą, tačiau skiriasi parametrais. Perkraunant funkciją, funkciją galima iš naujo apibrėžti naudojant skirtingų tipų argumentus arba skirtingą argumentų skaičių pagal reikalavimą. Tik per šiuos skirtumus kompiliatorius gali atskirti dvi perkrautas funkcijas.



Vienas pagrindinių funkcijų perkrovos privalumų yra tas, kad tai padidina programos skaitomumą, nes mums nereikia vėl ir vėl naudoti skirtingų pavadinimų tam pačiam veiksmui.

Keičiant argumentų skaičių

Tokiu funkcijų perkrovos būdu mes apibrėžiame dvi funkcijas su tais pačiais pavadinimais, bet skirtingu to paties tipo parametrų skaičiumi. Pavyzdžiui, žemiau paminėtoje programoje mes sukūrėme dvi pridėjimo () funkcijas, kad grąžintume dviejų ir trijų sveikųjų skaičių sumą.

// pirmosios funkcijos apibrėžimas 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 }

Sakoma, kad funkcija „add ()“ yra perkrauta, nes ji turi du apibrėžimus: vienas priima du argumentus, kitas - tris. Kuri funkcija add () bus iškviesta, priklauso nuo argumentų skaičiaus.



int main () {add (10, 20) // add () su 2 parametrais bus vadinamas add (10, 20, 30) // suma () su 3 parametrais bus iškviesta}
#include naudojant vardų sritį std int add (int a, int b) {cout<< a+b <

Ankstesniame pavyzdyje mes perkrauname funkciją add (), keisdami jos argumentų skaičių. Pirma, mes apibrėžiame funkciją add () su dviem parametrais, tada mes ją perkrauname, dar kartą apibrėždami funkciją add (), bet šį kartą - trimis parametrais.

Turėdami skirtingų tipų argumentus

Šiuo metodu mes apibrėžiame dvi ar daugiau funkcijų su tuo pačiu pavadinimu ir tuo pačiu parametrų skaičiumi, tačiau šiems parametrams naudojamas duomenų tipas yra skirtingas. Pavyzdžiui, šioje programoje mes turime tris funkciją add (), pirmasis gauna du sveiko skaičiaus argumentus, antrasis - du plūduriuojančius argumentus, o trečiasis - du dvigubus argumentus.

#include naudojant vardų sritį std int add (int x, int y) // pirmasis apibrėžimas {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) }

Ankstesniame pavyzdyje mes tris kartus apibrėžiame funkciją add (). Pirma, naudojant parametrus sveikieji skaičiai, antra, naudojant „float“ kaip parametrus, ir trečia, naudojant dvigubą parametrą.
Taigi du kartus nepaisome funkcijos add ().

Funkcijos pranašumai Perkrovimas C ++

  • Mes naudojame funkcijų perkrovą, kad išsaugotume atminties vietą, nuoseklumą ir mūsų programos įskaitomumą.

  • Naudodamiesi funkcijų perkrovos koncepcija, mes galime sukurti daugiau nei vieną funkciją tuo pačiu pavadinimu

    kas yra medkirčių java
  • Funkcijos perkrova rodo polimorfizmo elgesį, kuris leidžia mums elgtis kitaip, nors bus tam tikra sąsaja naudojant tą patį funkcijos pavadinimą.

  • Funkcijos perkrova pagreitina programos vykdymą.

  • Funkcijų perkrova naudojama norint pakartotinai naudoti kodą ir taupyti atmintį.

  • Tai padeda programai įkelti klasės metodą pagal parametro tipą.

  • Kodo priežiūra yra paprasta.

Funkcijos perkrovos C ++ trūkumai

  • Funkcijų deklaracijos, kurios skiriasi tik pagal grąžinimo tipą, negali būti perkrautos funkcijų perkrovos procesu.
  • Nario funkcijų deklaracijos su tais pačiais parametrais arba tais pačiais vardų tipais negali būti perkrautos, jei kuri nors iš jų yra deklaruojama kaip statinio nario funkcija.
  • klasė XYZ {static void func () void func () // klaida}

Funkcijos perkrova ir dviprasmybė

Kai kompiliatorius negali nuspręsti, kurią funkciją jis turėtų iškviesti pirmiausia tarp perkrautų funkcijų, ši situacija vadinama funkcijos perkrovos dviprasmybe. Kompiliatorius nevykdo programos, jei ji rodo dviprasmybės klaidą. Funkcijos priežastys, dėl kurių neaiškumas perkraunamas:

  • Tipo konversija.
  • Funkcija su numatytaisiais argumentais.
  • Funkcija su leidimu pagal nuorodą

Tipo konversija:

#include naudojant vardų sritį std void function (float) void function (int) void function (float x) {std :: cout<< 'Value of x is : ' <

Aukščiau pateiktas pavyzdys iškelia klaidą - „perkrautos„ funkcijos (dvigubos) iškvietimas “nėra aiškus“. Funkcija (3.4) iškvies pirmąją funkciją. Funkcija (34) pagal mūsų prognozę iškviečia antrąją funkciją. Bet taip nėra, nes C ++ visos slankiojo kablelio konstantos traktuojamos kaip dvigubos, o ne kaip plūdės. Jei „float“ kintamąjį pakeisime dvigubu, programa veiks gerai. Todėl tai vadiname tipo konversijos paklaida nuo „float“ iki „double“.

Funkcija su numatytaisiais argumentais:

#include naudojant vardų sritį std void function (int) void function (int, int) void function (int x) {std :: cout<< 'Value of x is : ' <

Ankstesniame pavyzdyje pateikiama klaida sakant „perkrautų„ linksmybių (int) “iškvietimas yra dviprasmiškas“, nes funkciją (int y, int z = 12) galima iškviesti dviem būdais:

  1. Iškviesdami funkciją vienu argumentu (ir ji automatiškai ims z = 12 reikšmę)
  2. Iškviečiant funkciją dviem argumentais.

Kai iškviečiame funkciją: function (12), mes visiškai užpildome tiek funkcijos (int), tiek funkcijos (int, int) sąlygą, taigi kompiliatorius patenka į neaiškumą, rodo klaidą.

Funkcija perduodant nuorodą

viršesnis nei perkrovimas java
#include naudojant vardų sritį std void function (int) void function (int &) void function (int a) {std :: cout<< 'Value of a is : ' < 

Pirmiau nurodyta programa pateikia klaidą sakydama „perkrautų„ linksmybių (int ir) “skambutis yra dviprasmiškas“. Kaip matome, pirmoji funkcija užima vieną sveiko skaičiaus argumentą, o antroji - kaip argumentą nurodo pamatinį parametrą. Šiuo atveju kompiliatorius negali suprasti, kuri funkcija reikalinga vartotojui, nes tarp linksmybių (int) ir linksmybių (int &) nėra sintaksinio skirtumo, todėl tai sukelia neaiškumų klaidą.

Tuo mes baigiame šios funkcijos perkrovą C ++. Jei norite sužinoti daugiau, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti mokyti jus tiek pagrindinėms, tiek pažangesnėms „Java“ koncepcijoms kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio tinklaraščio komentarų skiltyje ir mes kuo greičiau susisieksime su jumis.