Erinevus funktsiooni ülekoormamise ja alistamise vahel C ++ korral

Autor: Laura McKinney
Loomise Kuupäev: 1 Aprill 2021
Värskenduse Kuupäev: 11 Mai 2024
Anonim
Erinevus funktsiooni ülekoormamise ja alistamise vahel C ++ korral - Tehnoloogia
Erinevus funktsiooni ülekoormamise ja alistamise vahel C ++ korral - Tehnoloogia

Sisu


Jaotises „ülekoormamine'Määratleme ülekoormatud funktsioonid uuesti sama funktsiooni nimega, kuid erineva arvu ja tüüpi parameetritega. Jaotises „ülimuslik'Ülepakutud funktsiooni prototüüp on kogu programmis sama, kuid ülepaisutatavale funktsioonile eelneb põhiklassis märksõna' virtuaalne 'ja tuletatud klass määratleb selle uuesti ilma ühegi märksõnata.

Polümorfism on OOP üks olulisi tunnuseid. See tähendab lihtsalt "ühe nime kasutamist mitme vormi jaoks". Polümorfismi saab rakendada funktsioonide ülekoormamise, operaatori ülekoormamise ja virtuaalse funktsiooni abil. Mõlemad, „ülekoormamine” ja „ületamine”, tähendavad polümorfismi mõistet. Siin tähendab 'ülekoormamine' ajapolümorfismi kompileerimist ja 'ülearvamine' tööaja polümorfismi. Edasi õppides, kui räägime suurtest erinevustest „ülekoormamisel” ja „ülekaalu”.


Lisaks uurime võrdlusdiagrammi abil ülekoormamise ja alistamise erinevust.

  1. Võrdlusdiagramm
  2. Definitsioon
  3. Peamised erinevused
  4. Sarnasused
  5. Järeldus


Võrdlusdiagramm:

Võrdluse alusÜlekoormamineÜlimuslik
PrototüüpPrototüüp erineb, kuna parameetrite arv või tüüp võivad erineda.Prototüübi kõik aspektid peavad olema ühesugused.
MärksõnaÜlekoormamise ajal ei rakendatud ühtegi märksõna.Funktsioonile, mis tuleb üle vaadata, eelneb põhiklassis märksõna virtuaalne.
Eristav tegurParameetri arv või tüüp erineb, mis määrab funktsiooni versiooni kutsumise.Millist klassifunktsiooni osuti osutab, määrab see, millise klassi objekt sellele osutile omistatakse.
Mustri määratlemineFunktsioon määratletakse uuesti sama nimega, kuid erineva arvu ja parameetri tüübiga.Funktsioon on määratletud, sellele eelneb põhiklassis virtuaalne märksõna ja määratletakse tuletatud klass uuesti märksõnata.
Saavutamise aegKoosta aeg.Tööaeg.
Konstruktor / virtuaalne funktsioonKonstruktorid võivad olla üle koormatud.Virtuaalset funktsiooni saab tühistada.
Hävitaja
Hävitajat ei saa üle koormata.Hävitaja saab tühistada.
KöitmineÜlekoormus saavutab varase sidumise.Ülekaalutamine viitab hilisele sidumisele.


Ülekoormamise määratlus

Kompileeritud aja polümorfismi nimetatakse ülekoormamiseks. Kuna ülekoormus tekib polümorfismi kontseptsioonist, pakub see „ühist liidest mitmele meetodile”. See tähendab, et kui funktsioon on ülekoormatud, sisaldab see uue funktsiooni määratlemisel sama funktsiooni nime.

Ülekoormatud funktsioonid erinevad üksteisest, erinevad 'parameetrite arv või tüüp', see eristab ühte ülekoormatud funktsiooni teisest. Sel viisil tuvastab kompilaator, millist ülekoormatud funktsiooni kutsutakse. Kõige sagedamini on ülekoormatud funktsioonid konstruktorid. 'Koopiakonstruktor' on omamoodi konstruktori ülekoormamine.

Ülekoormuse rakendamine rakenduses C ++

klassi ülekoormus {int a, b; avalik: int load (int x) {// esimene laadimine () funktsioon a = x; tagasi a; } int koormus (int x, int y) {// teine ​​laadimine () funktsioon a = x; b = y; tagasi a * b; }}; int main () {ülekoormus O1; O1.koormus (20); // esimene laadimine () funktsiooni väljakutse O1.load (20,40); // teise laadimise () funktsiooni kõne}

Siin on klassi ülekoormuse funktsioon koormus () üle koormatud. Klassi kahte ülekoormatud funktsiooni saab eristada viisil, et esimese laadimise () funktsioon võtab vastu ainult ühe täisarvu parameetri, samas kui teise laadimise () funktsioon võtab vastu kaks täisarvu parameetrit. Kui klassi ülekoormusobjekt kutsub koormuse () funktsiooni ühe parameetriga, siis kutsutakse esimene laadimisfunktsioon (). Kui objekt kutsub üles laadimisfunktsiooni (), mis läbib kaks parameetrit, kutsutakse teine ​​laadimisfunktsioon ().

Esmatähtsuse mõiste

Käitusaja jooksul saavutatud polümorfismi nimetatakse „ülimuslikuks”. Selle saavutamiseks kasutatakse „pärimist” ja „virtuaalseid funktsioone”. Funktsioonile, millest mööda vaadata, eelneb põhiklassis märksõna „virtuaalne” ja määratletakse uuesti tuletatud klassis ilma ühegi märksõnata.

Üks tähtsamaid asju, mida ületamise korral tuleb meeles pidada, on see, et ülepakutud funktsiooni prototüüp ei tohi muutuda, kui tuletatud klass selle uuesti määratleb. Kui kõne alistatakse funktsioonile, määrab C ++ funktsiooni kutsumise aluseks oleva objekti tüübi põhjal, millisele funktsiooni versioonile kutsutakse.

Ülevõtmise rakendamine C ++ süsteemis

klassi alus {public: virtual void funct () {// põhiklassi cout virtuaalne funktsioon << "See on põhiklasside funktsioon ()"; }}; klass tuletatud1: avalik baas {avalik: void funct () {// baasklassi virtuaalne funktsioon, mis on uuesti määratletud tuletatud1 klassi sisuga << "See on tuletatud1 klassi funktsioon ()"; }}; klass tuletatud2: avalik baas {avalik: void funct () {// baasklassi virtuaalne funktsioon, mis on uuesti määratletud tuletatud2 klassis cout << "See on tuletatud2 klassi funktsioon ()"; }}; int main () {alus * p, b; tuletatud1 d1; tuletatud2 d2; * p = & b; p-> funktsioon (); // kõne põhiklassi funktsioonile (). * p = & d1; p-> funktsioon (); // kõne tuletatud1 klassi funktsioonile (). * p = & d2; p-> funktsioon (); // kõne deri2 klassi funct (). tagasi 0; }

Siin on üks põhiklass, mille pärandavad avalikult kaks tuletatud klassi. Virtuaalne funktsioon määratletakse põhiklassis märksõnaga „virtuaalne” ja seda määratlevad mõlemad tuletatud klassid, millel pole märksõna. Peamises () moodustab põhiklass osutimuutuja „p” ja objekti „b”; Klass „tuletatud1” loob objekti d1 ja tuletatud2 klass loob objekti d2.

Nüüd omistatakse algklassi objekti „b” aadress põhiklassi „p” osutile. 'P' kutsub funktsiooni funktsiooni (), seega kutsutakse põhiklassi funktsioon.Siis omistatakse tuletatud1 klassi objekti 'd1' osutile 'p', see omakorda kutsub üles funktsiooni (); siin täidetakse tuletatud1 klassi funktsioon funct (). Lõpuks omistatakse osuti „p” tuletatud2 klassi objektile. Siis 'p' kutsub funktsiooni funct (), mis täidab tuletatud klassi funktsiooni funct ().

Kui deriveeritud1 / deriveeritud2 klass ei määranud funktsiooni () ümber, siis oleks kutsutud põhiklassi funktsioon (), kuna virtuaalsed funktsioonid on hierarhilised.

  1. Ülekoormatud funktsiooni prototüüp erineb ülekoormatud funktsioonile edastatud parameetri tüübi ja arvu tõttu. Teisest küljest ei muutu ületatud funktsiooni prototüüp, kuna ülepakutud funktsioon täidab erinevaid toiminguid selle klassi jaoks, kuhu ta kuulub, kuid sama tüüpi ja parameetrite arvuga.
  2. Ülekoormatud funktsiooni nimi ei eelne ühegi märksõnaga, ülepakutud funktsiooni nimi eelneb ainult põhiklassi klaviatuuriga “Virtuaalne”.
  3. Milline ülekoormatud funktsioon käivitatakse, sõltub funktsioonile edastatud parameetri tüübist või arvust. Selle klassi ülepakutud funktsioon sõltub sellest, millise klassi objekti aadress omistatakse osutile, mis selle funktsiooni käivitas.
  4. Milline ülekoormatud funktsioon käivitatakse, lahendatakse kompileerimise ajal. Milline ülepakutud funktsioon, millele tuleb tugineda, lahendatakse käitusaja jooksul.
  5. Konstruktorid võivad olla üle koormatud, kuid neid ei saa üle tähtsustada.
  6. Destruktoreid ei saa üle koormata, kuid need võivad üle olla.
  7. Ülekoormamine saavutab varase sidumise, kuna ülekoormatud funktsioon käivitatakse kompileerimise aja jooksul. Üleskirjutamine saavutab hilise sidumise, kuna ületatud funktsioon käivitatakse tööaja jooksul.

Sarnasused

  1. Mõlemat rakendatakse klassi liikmefunktsioonide jaoks.
  2. Polümorfism on mõlema taga olev mõiste.
  3. Funktsiooni nimi jääb samaks, kui rakendame funktsioonidele ülekoormamist ja alistamist.

Järeldus

Ülekoormamine ja alistamine näivad sarnased, kuid see pole nii. Funktsioone saab üle koormata, kuid ükski klass ei saa tulevikus ülekoormatud funktsiooni uuesti määratleda. Virtuaalset funktsiooni ei saa üle koormata; neid saab ainult tühistada.