Razlika med preobremenitvijo funkcije in preglasitvijo v C ++

Avtor: Laura McKinney
Datum Ustvarjanja: 1 April 2021
Datum Posodobitve: 11 Maj 2024
Anonim
scarificateur LIDL PARKSIDE aérateur 1500 W retirer la mousse pelouse + problème de tondeuse à gazon
Video.: scarificateur LIDL PARKSIDE aérateur 1500 W retirer la mousse pelouse + problème de tondeuse à gazon

Vsebina


V „preobremenjenost„Na novo definiramo preobremenjene funkcije z istim imenom funkcije, vendar različnim številom in vrsto parametrov. V „premoč„Prototip prepisane funkcije je enak v celotnem programu, vendar pred funkcijo, ki jo je treba preglasiti, je ključna beseda„ virtualni “v osnovnem razredu in jo na novo določi izpeljani razred brez kakršne koli ključne besede.

Polimorfizem je ena ključnih značilnosti OOP. Preprosto pomeni „uporabljati eno ime za več obrazcev“. Polimorfizem lahko izvajamo z uporabo "preobremenitve s funkcijami", "preobremenitvijo operaterja" in "virtualne funkcije". Tako „preobremenitev“ kot „preglasitev“ pomenita koncept polimorfizma. Tu je "preobremenitev" časovni polimorfizem, "preglasitev" pa polimorfizem, ki se izvaja. Nadalje, če govorimo o glavni razliki v "preobremenitvi" in "preglasitvi".

Nadalje s pomočjo primerjalne tabele preučujemo razliko med preobremenitvijo in preglasitvijo.


  1. Primerjalna tabela
  2. Opredelitev
  3. Ključne razlike
  4. Podobnosti
  5. Zaključek


Primerjalna tabela:

Osnove za primerjavoPreobremenitevPrevladujoče
PrototipPrototip se razlikuje, saj se lahko število ali vrsta parametra razlikujeta.Vsi vidiki prototipa morajo biti enaki.
Ključna besedaMed preobremenitvijo ni bila uporabljena nobena ključna beseda.Funkcija, ki jo je treba preglasiti, ima v osnovnem razredu ključno besedo virtualno.
Razlikovalni dejavnikŠtevilo ali vrsta parametra se razlikuje, kar določa, da se kliče različica funkcije.Katero funkcijo razredov pokliče kazalec, določi naslov, kateri razred je predmetu dodeljen.
Določitev vzorcaFunkcije so na novo definirane z istim imenom, vendar različnim številom in vrsto parametra.Funkcija je definirana, pred njo je ključna beseda virtual v glavnem razredu in na novo določena v izpeljanem razredu s ključno besedo ven.
Čas izvedbeČas priprave.Čas izvajanja.
Konstruktor / navidezna funkcijaKonstruktorji so lahko preobremenjeni.Navidezno funkcijo lahko preglasimo.
Destruktor
Destruktorja ni mogoče preobremeniti.Destruktor je mogoče preglasiti.
VezavaS preobremenitvijo dosežemo zgodnjo vezavo.Prevelikost se nanaša na pozno vezavo.


Opredelitev preobremenitve

Polimorfizem v kompilaciji se imenuje "preobremenitev". Ker preobremenitev nastane iz koncepta polimorfizma, zagotavlja "skupen vmesnik za več metod". To pomeni, da če je funkcija preobremenjena, vsebuje isto ime funkcije, medtem ko je na novo definirano.

Preobremenjene funkcije se med seboj razlikujejo glede na "število ali vrsto parametrov", zaradi česar se ena preobremenjena funkcija razlikuje od druge. Na ta način prevajalnik prepozna, katera preobremenjena funkcija se kliče. Najpogosteje preobremenjene funkcije so "konstruktorji". "Konstruktor kopiranja" je neke vrste "konstruktor preobremenitev".

Izvajanje preobremenitve v C ++

preobremenitev razreda {int a, b; javni: int load (int x) {// funkcija prvega nalaganja () a = x; vrniti a; } int load (int x, int y) {// druga funkcija load () a = x; b = y; vrne a * b; }}; int main () {preobremenitev O1; O1.load (20); // prvi poziv () funkcije klica O1.load (20,40); // drugi klic funkcije load ()}

Tu je funkcijska obremenitev () razreda preobremenjena. Dve preobremenjeni funkciji razreda lahko ločimo na način, da prva funkcija load () sprejme samo en celoten parameter, medtem ko druga load () funkcija sprejme dva cela parametra. Ko objekt preobremenitve razreda pokliče funkcijo load () z enim parametrom, se najprej pokliče funkcija load (). Kadar objekt kliče funkcijo load (), ki prenese dva parametra, se pokliče druga funkcija load ().

Opredelitev preglasitve

Polimorfizem, ki ga dosežemo med tekom, imenujemo "prevladovanje". To se doseže z uporabo "dedovanja" in "virtualnih funkcij". Pred funkcijo, ki jo je treba preglasiti, je v osnovnem razredu ključna beseda „virtualno“ in jo na novo določite v izpeljanem razredu brez ključne besede.

Ena izmed najpomembnejših stvari, ki si jih je treba zapomniti v primeru preglasitve, je, da se prototip prepisane funkcije ne sme spreminjati, medtem ko jo izpeljani razred na novo definira. Ko je prepisani funkciji dodeljen klic, C ++ določa, katera različica funkcije se imenuje na podlagi "vrste predmeta, ki ga kaže kazalec", s katerim se opravi klic funkcije.

Izvajanje prevladovanja v C ++

class base {public: virtual void funct () {// virtualna funkcija osnovnega razreda cout << "To je osnovni razred funct ()"; }}; razred izveden1: javna baza {public: void funct () {// virtualna funkcija osnovnega razreda, na novo definirana v izveden1 class cout << "To je izveden1 razred funkcij ()"; }}; razred izveden2: javna baza {public: void funct () {// virtualna funkcija osnovnega razreda, na novo definirana v izvedeno razredu cout << "To je izveden razred 2 funct ()"; }}; int main () {osnova * p, b; izpeljan1 d1; izpeljano2 d2; * p = & b; p-> funct (); // klic v osnovni razred funct (). * p = & d1; p-> funct (); // klic na funkcijo razreda1 izvedbe (). * p = & d2; p-> funct (); // klic na funkcijo razreda2 izvedbe (). vrne 0; }

Tu je en sam osnovni razred, ki ga javno podedujejo dva izvedena razreda. Navidezna funkcija je definirana v osnovnem razredu s ključno besedo 'virtualna' in jo na novo definira izpeljana razreda brez ključne besede. V glavnem () osnovni razred ustvari spremenljivko kazalca 'p' in objekt 'b'; Razreda 'deri1' ustvari objekt d1 in razred22 ustvari objekt d2 '.

Zdaj je naslov objekta "b" osnovnega razreda dodeljen kazalcu osnovnega razreda "p". 'P' pokliče funkcijo funct (), zato se imenuje funkcija osnovnega razreda.Nato je naslov izpeljanega predmeta razreda1 'd1' dodeljen kazalcu 'p' in spet pokliče funkcijo (); tukaj se izvede funkcija funct () izpeljanega razreda1. Končno je kazalec 'p' dodeljen predmetu razreda 2. Nato 'p' pokliče funkcijo funct (), ki izvrši funkcijo funct () razreda deri2.

Če razred1 izveden / izveden2 ne bi na novo definiral funkcije (), bi bil imenovan funkt () osnovnega razreda, saj so navidezne funkcije 'hierarhične'. "

  1. Prototip funkcije, ki se preobremenjuje, se razlikuje zaradi vrste in števila parametrov, ki so preneseni na funkcijo preobremenitve. Po drugi strani pa se prototip prepisane funkcije ne spremeni, ker prepisana funkcija izvaja drugačno dejanje za različni razred, ki mu pripada, vendar z istim tipom in številom parametrov.
  2. Preobremenjeno ime funkcije ne stoji pred nobeno ključno besedo, medtem ko ime prepisane funkcije pred tipkovnico "Virtual" samo v osnovnem razredu.
  3. Katera preobremenjena funkcija se prikliče, je odvisno od vrste ali števila parametrov, ki se prenesejo na funkcijo. Prepisana funkcija katerega razreda se prikliče je odvisna od tega, kateri naslov predmeta razreda je dodeljen kazalcu, ki je priklical funkcijo.
  4. Katero preobremenjeno funkcijo je treba priklicati se odpravi v času prevajanja. Katera prepisana funkcija, ki jo je treba poklicati, je med izvajanjem rešena.
  5. Konstruktorji so lahko preobremenjeni, vendar jih ni mogoče preglasiti.
  6. Destruktorjev ni mogoče preobremeniti, lahko pa jih preglasimo.
  7. Preobremenitev doseže zgodnjo vezavo, pri čemer se bo v času prevajanja razrešila funkcija preobremenjene funkcije. Prevladovanje doseže pozno vezavo, saj se prekliče funkcija, ki se bo priklicala.

Podobnosti

  1. Obe se uporabljata za funkcije članov razreda.
  2. Polimorfizem je osnovni koncept obeh.
  3. Ime funkcije ostane isto, medtem ko za funkcije uporabljamo preobremenitev in preglasitev.

Zaključek

Zdi se, da je preobremenjenost in preglasitev podobna, vendar temu ni tako. Funkcije so lahko preobremenjene, vendar kateri koli razred ne more v prihodnosti na novo definirati preobremenjene funkcije. Navidezne funkcije ni mogoče preobremeniti; jih je mogoče le preglasiti