Priporočena, 2024

Izbira Urednika

Razlika med funkcijskim preobremenitvijo in razveljavitvijo v C ++

Polimorfizem je ena od ključnih značilnosti OOP. To preprosto pomeni „z uporabo enega imena za več obrazcev“. Polimorfizem se lahko izvaja z uporabo „preobremenitve funkcij“, „preobremenitve operaterja“ in „virtualne funkcije“. Tako „preobremenitev“ kot „prevlada“ pomenita koncept polimorfizma. Tu je 'preobremenitev' polimorfizem časa prevajanja in 'prevlada' je polimorfizem časa izvajanja. Nadaljnje preučevanje, če govorimo o glavni razliki v "preobremenitvi" in "prevladujočem". Pri 'preobremenitvi' ponovno definiramo preobremenjene funkcije z istim imenom funkcije, vendar različno število in tip parametrov. V 'overriding' prototipu funkcije prekoračitve je enaka v celotnem programu, vendar pa pred funkcijo, ki jo je treba razveljaviti, sledi ključna beseda 'virtual' v osnovnem razredu in jo na novo definira izvedeni razred brez ključne besede.

Poleg tega preučujemo razliko med preobremenitvijo in razveljavitvijo s pomočjo primerjalne tabele.


Tabela za primerjavo:

Podlaga za primerjavoPreobremenitevPreglasitev
PrototipPrototip se razlikuje glede na število ali vrsto parametra.Vsi vidiki prototipa morajo biti enaki.
Ključna besedaMed preobremenitvijo ni uporabljena nobena ključna beseda.Funkciji, ki jo je treba razveljaviti, sledi ključna beseda "virtual" v osnovnem razredu.
Razlikovalni dejavnikŠtevilo ali vrsta parametra se razlikuje, kar določa, da se kliče različica funkcije.Katera funkcija razreda se imenuje s kazalcem, je določena z naslovom, kateremu predmetu razreda je dodeljen ta kazalec.
Določanje vzorcaFunkcija se na novo definira z istim imenom, vendar z različnim številom in vrsto parametra.Funkcija je definirana, pred njo pa je ključna beseda "virtual" v glavnem razredu in na novo definirana s pomočjo izpeljanega razreda brez ključne besede.
Čas izpolnitvePreštej čas.Čas izvajanja.
Konstruktor / virtualna funkcijaKonstruktorji so lahko preobremenjeni.Virtualno funkcijo lahko prekličete.
Uničevalec
Destruktorja ni mogoče preobremeniti.Uničevalec se lahko razveljavi.
VezavaPreobremenitev doseže zgodnjo vezavo.Preglasitev se nanaša na pozno vezavo.

Opredelitev preobremenitve

Polimorfizem časa sestave se imenuje "preobremenitev". Ker se preobremenitev generira iz koncepta polimorfizma, zagotavlja »skupni vmesnik za več metod«. To pomeni, da, če je funkcija preobremenjena, vsebuje isto ime funkcije, medtem ko je na novo definirana.

Preobremenjene funkcije se razlikujejo glede na, drugačno "število ali tip parametrov", zaradi česar je ena preobremenjena funkcija drugačna od druge. Na ta način prevajalnik prepozna, katera preobremenjena funkcija se kliče. Najpogosteje preobremenjene funkcije so 'konstruktorji'. "Kopiraj konstruktor" je vrsta "preobremenitve konstruktorja".

Izvajanje preobremenitve v C ++

 preobremenitev razreda {int a, b; public: int load (int x) {// prva funkcija load () a = x; vrnitev a; } int load (int x, int y) {// druga funkcija obremenitve () a = x; b = y; vrni a * b; }}; int main () {preobremenitev O1; O1.load (20); // prvi nalaganje funkcije () O1.load (20, 40); // drugi funkcijski poziv () 

Tu je funkcija load () preobremenitve razreda preobremenjena. Dve preobremenjeni funkciji razreda je mogoče razlikovati tako, da prva obremenitev () funkcija sprejema le en sam celoštevilski parameter, medtem ko druga obremenitev () funkcija sprejema dva celoštevilska parametra. Ko objekt preobremenitve razreda pokliče funkcijo load () z enim samim parametrom, se najprej pokliče funkcija load (). Ko objekt zahteva funkcijo load (), ki prenaša dva parametra, se pokliče druga funkcija load ().

Opredelitev razveljavitve

Polimorfizem, dosežen med izvajanjem, se imenuje »prevlada«. To se doseže z uporabo „dedovanja“ in „virtualnih funkcij“. Funkciji, ki jo je treba razveljaviti, sledi ključna beseda "navidezno" v osnovnem razredu in na novo definirana v izpeljanem razredu brez ključne besede.

Ena najpomembnejših stvari, ki si jih morate zapomniti v primeru preglasitve, je, da se prototip funkcije prekoračitve ne sme spreminjati, medtem ko jo izpeljani razred na novo definira. Ko je preklopljena funkcija dana klic, C ++ določa, katera različica funkcije se imenuje na podlagi "tipa predmeta, ki ga kaže kazalec", s katerim se opravi funkcijsko klicanje.

Izvajanje razveljavitve v C ++

 class base {public: virtual void funct () {// virtualna funkcija osnovnega razreda cout << "To je funkcija osnovnega razreda ()"; }}; razred izveden1: javna baza {javna: void funct () {// navidezna funkcija osnovnega razreda, ki je na novo definirana v razredu izvedenka cout << "To je funct () iz razreda 1; }}; razred izveden2: javna baza {javna: void funct () {// navidezna funkcija osnovnega razreda, ki je redefinirana v razredu izvedenih2 cout  funct (); // klic na funkcijo izvedenega razreda (). * p = & d2; p-> funct (); // klic na funkcijo izvedenega razreda (). return 0; } 

Tukaj je en sam osnovni razred, ki ga javno podedujejo dva izpeljana razreda. Virtualna funkcija je definirana v osnovnem razredu s ključno besedo "virtualno", ki jo na novo definirajo izpeljani razredi brez ključne besede. V main () osnovni razred ustvari spremenljivko kazalca 'p' in objekt 'b'; 'izvedeni' creates razred ustvari objekt d1 in izvedeni razred ustvarja objekt d2 '.

Sedaj je naslov objekta b binarnega razreda dodeljen kazalcu osnovnega razreda "p". 'p' kliče funkcijo funct (), zato se imenuje funkcija osnovnega razreda. Nato se naslovu izvedenega objekta razreda 'd1' dodeli kazalcu 'p', spet daje klic funct (); tukaj se izvrši funkcija funct () iz izpeljanega razreda1. Nazadnje, kazalec 'p' je dodeljen predmetu razreda derivata2. Potem 'p' kliče funkcijo funct (), ki izvaja funkcijo func () iz izvedenega razreda.

Če razred izveden1 / izveden2 ne redefinira funkcije (), potem bi se poklical osnovni razred funct (), ker so virtualne funkcije "hierarhične".

Ključne razlike med preobremenitvijo in razveljavitvijo

  1. Prototip funkcije, ki je preobremenjena, se razlikuje glede na vrsto in število parametrov, ki se posredujejo preobremenjeni funkciji. Po drugi strani pa se prototip funkcije preglasitve ne spremeni, ker funkcija preglasitve opravlja drugačno dejanje za različne razrede, ki jim pripada, vendar z istim tipom in številom parametra.
  2. Preobremenjeno ime funkcije se ne pojavi pred katero koli ključno besedo, medtem ko ime funkcije, ki jo je treba nadomestiti, izhaja iz ključa "Virtual" samo v osnovnem razredu.
  3. Katera preobremenjena funkcija je priklicana, je odvisna od vrste ali števila parametrov, ki se posredujejo funkciji. Preglasitvena funkcija, od katere klice se kliče, je odvisna od tega, kateri predmetni naslov razreda je dodeljen kazalcu, ki je priklical funkcijo.
  4. Katera preobremenjena funkcija naj bi bila priklicana, se reši med prevajanjem. Katera funkcija, ki jo je treba izvesti, je odpravljena med izvajanjem.
  5. Konstruktorji se lahko preobremenijo, vendar jih ni mogoče preglasiti.
  6. Destruktorjev ni mogoče preobremeniti, vendar jih je mogoče razveljaviti.
  7. Preobremenitev doseže zgodnje vezanje, s katerim se prikliče preobremenjena funkcija, se rešuje med prevajalnim časom. Preglasitev doseže pozno vezavo, ko se preklopna funkcija pokliče, se rešuje med izvajanjem.

Podobnosti

  1. Oba sta uporabljena za funkcijo člana razreda.
  2. Polimorfizem je osnovni koncept obeh.
  3. Ime funkcije ostane enako, medtem ko uporabljamo preobremenitev in preglasitev funkcij.

Zaključek

Preobremenitev in razveljavitev se zdi podobna, vendar to ne drži. Funkcije se lahko preobremenijo, vendar pa v prihodnosti kateri koli razred ne more ponovno definirati preobremenjene funkcije. Virtualne funkcije ni mogoče preobremeniti; mogoče jih je le preglasiti.

Top