Forskjell mellom overbelastning av funksjon og overstyring i C ++

Forfatter: Laura McKinney
Opprettelsesdato: 1 April 2021
Oppdater Dato: 11 Kan 2024
Anonim
Forskjell mellom overbelastning av funksjon og overstyring i C ++ - Teknologi
Forskjell mellom overbelastning av funksjon og overstyring i C ++ - Teknologi

Innhold


I ‘overbelastning‘Vi omdefinerer de overbelastede funksjonene med samme funksjonsnavn, men med forskjellig antall og parametertype. I ‘overordnet"Prototype av overstyret funksjon er den samme i hele programmet, men funksjonen som skal overstyres, er gitt foran nøkkelordet" virtuell "i baseklassen og omdefineres av den avledede klassen uten noe nøkkelord.

Polymorfisme er en av de avgjørende trekk ved OOP. Det betyr ganske enkelt "å bruke ett navn for flere former". Polymorfisme kan implementeres ved bruk av ‘funksjonsoverbelastning’, ‘operatøroverbelastning’ og ‘virtuell funksjon’. Både ‘overbelastning’ og ‘overstyring’ innebærer begrepet polymorfisme. Her er ‘overbelastning’ kompilere tidspolymorfisme og ‘overstyring’ er kjøretidspolymorfisme. Studerer videre, hvis vi snakker om den store forskjellen i ‘overbelastning’ og ‘overstyring’.

Videre studerer vi forskjellen mellom overbelastning og overstyring ved hjelp av et sammenligningskart.


  1. Sammenligningstabell
  2. Definisjon
  3. Viktige forskjeller
  4. likheter
  5. Konklusjon


Sammenligningstabell:

Grunnlag for sammenligningoverbelastningOverstyre
prototypePrototypen er forskjellig ettersom antall eller parametertype kan variere.Alle aspekter ved prototypen må være den samme.
søkeordIngen søkeord ble brukt under overbelastning.Funksjon som skal overstyres, blir gitt foran av virtuelle nøkkelord i baseklassen.
Skille faktorAntall eller type parameter skiller seg ut som bestemmer hvilken versjon av funksjonen blir kalt.Hvilken klassefunksjon som kalles av pekeren, bestemmes av, adressen til hvilke klasserobjekt som er tilordnet den pekeren.
Definerende mønsterFunksjon defineres på nytt med samme navn, men forskjellig antall og parameter.Funksjon er definert, foran et nøkkelord virtuelt i hovedklasse og omdefinert av avledet klasse uten søkeord.
GjennomførelsestidSamle tid.Kjøretid.
Konstruktør / virtuell funksjonKonstruktører kan overbelastes.Virtuell funksjon kan overstyres.
Destructor
Destruktoren kan ikke overbelastes.Destruktoren kan overstyres.
bindingOverbelastning oppnår tidlig binding.Overstyring refererer til sen binding.


Definisjon av overbelastning

Kompileringstid-polymorfisme kalles ‘overbelastning.’ Ettersom overbelastning genereres fra et begrep polymorfisme, gir det “et felles grensesnitt for flere metoder”. Det betyr at hvis en funksjon er overbelastet, inneholder den samme funksjonsnavn mens den omdefineres.

Overbelastede funksjoner avviker i forhold til, forskjellige ‘antall eller type parameter (er), det gjør at en overbelastet funksjon skiller seg fra en annen. På denne måten gjenkjenner kompilatoren hvilken overbelastet funksjon som blir kalt. Vanligvis er overbelastede funksjoner ‘konstruktører’. ‘Copy constructor’ er en slags “overbelastning av konstruktører”.

Implementering av overbelastning i C ++

klassens overbelastning {int a, b; public: int load (int x) {// first load () -funksjon a = x; return a; } int last (int x, int y) {// second load () funksjon a = x; b = y; return a * b; }}; int main () {overbelastning O1; O1.load (20); // første belastning () -funksjon samtale O1.load (20,40); // second load () funksjonsanrop}

Her er funksjonsbelastning () av ​​klassens overbelastning overbelastet. De to overbelastede funksjonene i klassen kan skilles på en måte som første belastning () -funksjon bare aksepterer en hel helparameter, mens den andre belastning () -funksjonen aksepterer to heltalparameter. Når objektet for klassens overbelastning kaller lasten () -funksjonen med en enkelt parameter, blir den første belastningen () -funksjonen kalt. Når objektet kaller last () -funksjon som passerer to parametere, blir andre belastning () -funksjonen kalt.

Definisjon av Overriding

Polymorfisme oppnådd under kjøretid kalles ‘overstyring.’ Det oppnås ved å bruke ‘arv’ og ‘virtuelle funksjoner’. Funksjonen som skal overstyres, forutføres av nøkkelordet ‘virtuell’ i en baseklasse og omdefineres i en avledet klasse uten noen nøkkelord.

Noe av det viktigste å huske i tilfelle overstyring er at prototypen til den overstyrte funksjonen ikke må endres mens avledet klasse omdefinerer den. Når funksjonen overstyres får en samtale, bestemmer C ++ hvilken versjon av funksjonen som kalles basert på ‘typen av objektet som er pekt av en peker’ som funksjonen som ringer utføres med.

Implementering av overstyring i C ++

class base {public: virtual void funct () {// virtual function of base class cout << "Dette er en base classs funct ()"; }}; klasse avledet1: offentlig base {public: void funct () {// virtual function of base class redefined in deriv1 class cout << "Dette er en deriv11 classs funct ()"; }}; class deriv2: public base {public: void funct () {// virtual function of base class redefined in deriv2 class cout << "Dette er en deriv2 classs funct ()"; }}; int main () {base * p, b; avledet1 d1; avledet2 d2; * P = & b; p-> funksjo (); // ringe til baseklassefunksjon (). * P =-d1; p-> funksjo (); // samtale til deriv1 klassefunksjoner (). * P = & d2; p-> funksjo (); // samtale til deriv2 klassefunksjoner (). retur 0; }

Her er det en enkelt baseklasse som er arvelig av to avledede klasser. En virtuell funksjon er definert i en baseklasse med et nøkkelord ‘virtuell’, og den omdefineres av begge de avledede klassene uten nøkkelord. I main () oppretter baseklasse en pekervariabel ‘p’ og et objekt ‘b’; ‘Avledet ′ klasse oppretter et objekt d1 og avledet2 klasse oppretter et objekt d2’.

Nå tildeles adressen til baseklassens objekt ‘b’ til å begynne med pekeren til baseklassen ‘p’. ‘P’ ringer til funksjonsfunksjonen (), så en funksjon av baseklassen kalles.Da blir adressen til avledet1 klasseobjekt ‘d1’ tilordnet pekeren ‘p’, igjen gir den oppfordring til funct (); her blir funksjonen funct () fra deriv1-klassen utført. Til slutt tildeles pekeren ‘p’ til deriv2-klassens objekt. Så kaller ‘p’ funksjonsfunksjon () som utfører funksjonsfunksjonene () til deriv2-klassen.

Hvis deriv1 / deriv2-klassen ikke omdefinerte funct (), ville funksjonene () til baseklasse blitt kalt, da virtuell funksjon er 'hierarkisk'.

  1. Prototypen til en funksjon som blir overbelastet, avviker på grunn av typen og antall parametere som sendes til den overbelastede funksjonen. På den annen side endres ikke prototypen til den overstyrte funksjonen fordi en overstyrt funksjon utfører forskjellige handlinger for forskjellige klasser den tilhører, men med samme type og antall parametere.
  2. Det overbelastede funksjonsnavnet går ikke foran med noen nøkkelord, mens navnet på en overstyrt funksjon går foran keyordet "Virtual" i baseklasse.
  3. Hvilken overbelastet funksjon som påberopes avhenger av typen eller antall parameter som sendes til funksjonen. Den overstyrte funksjonen til hvilken klasse blir påkalt avhenger av, hvilken klasses objektadresse er tilordnet pekeren, som påkaller funksjonen.
  4. Hvilken overbelastet funksjon som skal påberopes løses i løpet av kompileringstiden. Hvilken overstyret funksjon som skal påberopes løses under kjøretid.
  5. Konstruktører kan være overbelastet, men kan ikke overstyres.
  6. Destruktorer kan ikke overbelastes, men de kan bli overstyrt.
  7. Overbelastning oppnår tidlig binding da den overbelastede funksjonen blir påkalt løses i løpet av kompileringstiden. Overstyring oppnår sen binding da funksjonen som overstyres funksjon blir løst under kjøretid.

likheter

  1. Begge brukes på medlemsfunksjoner i en klasse.
  2. Polymorfisme er det grunnleggende konseptet bak begge.
  3. Funksjonsnavnet forblir det samme mens vi bruker overbelastning og overstyring av funksjonene.

Konklusjon

Overbelastning og overstyring virker lignende, men dette er ikke tilfelle. Funksjoner kan overbelastes, men hvilken som helst klasse kan ikke definere den overbelastede funksjonen ytterligere i fremtiden. En virtuell funksjon kan ikke overbelastes; de kan bare overstyres.