Hvordan du bruker ”overstyring” i C++?

Hvordan du bruker ”overstyring” i C++?

I C ++, hvis en funksjon med samme navn eksisterer i både base og avledet klasse, overstyrer den avledede klassefunksjonen baseklassefunksjonen. Dette viser at hvis en funksjon kalles med objektet til den avledede klassen, i stedet for baseklassefunksjonen, vil den avledede klassefunksjonen bli utført. Dette er kjent som funksjon som er overordnet i C++, og det lar avledede klasser endre oppførselen til baseklassefunksjonen for å passe til deres spesifikke behov. Overstyre er viktig siden det gir mulighet for gjenbruk av kode, noe som gjør det lettere for programmererne å endre koden og fjerne behovet for å skrive koden fra bunnen av.

I denne artikkelen vil vi vise hvordan du bruker "overstyring" på C ++ programmeringsspråk.

Innhold for denne artikkelen:

  • Hvordan bruke overstyring i C++?
  • Eksempel 1: C ++ Funksjonsoverskridende
  • Eksempel 2: C ++ tilgang til overstyring av funksjonen til baseklassen
  • Eksempel 3: C ++ Ring overstyret funksjon fra avledet klasse
  • Eksempel 4: C ++ Ring overstyret funksjon ved hjelp av peker
  • Forskjell mellom overstyring og overbelastning i C++
  • Konklusjon

Hvordan bruke overstyring i C++

Å bruke 'overstyring' I C ++ trenger vi ganske enkelt å legge den til etter funksjonserklæringen i den avledede klassen. Her er et eksempel:

Eksempel 1: C ++ Funksjonsoverskridende

Den medfølgende koden demonstrerer funksjon som er overordnet i C++.

#inkludere
ved hjelp av navneområdet STD;
Klasseforeldre
offentlig:
void Linuxhint_print ()

cout << "This is Base Function" << endl;

;
Klassebarn: offentlig foreldre
offentlig:
void Linuxhint_print ()

cout << "This is Derived Function" << endl;

;
int main ()

Barn barn_derivert;
Child_derived.Linuxhint_print ();
return 0;

Vi har en foreldreklasse med en funksjon som heter Linuxhint_print () som skriver ut en melding til konsollen. Vi oppretter en barneklasse som offentlig arver fra foreldreklassen og overstyrer Linuxhint_print () Funksjon med sin egen implementering som også skriver ut en melding til konsollen.

I hovedfunksjonen () er et objekt i barneklassen opprettet og navngitt som Linuxhint_print () funksjon. Siden barneklassen overstyrer Linuxhint_print () Funksjonen til foreldreklassen, vil utdata være Dette er avledet funksjon i stedet for Dette er basefunksjon.

Eksempel 2: C ++ tilgang til overstyring av funksjonen til baseklassen

Noen ganger kan det være lurt å kalle den overstyrte funksjonen i baseklassen fra den avledede klassen. Vi kan gjøre dette ved å bruke omfangsoppløsningsoperatøren '::'. Her er et eksempel:

#inkludere
ved hjelp av navneområdet STD;
Klassebase
offentlig:
virtuell tomt test ()
cout << "This is Base Class" << endl;

;
Klasse avledet: offentlig base
offentlig:
void test ()
Base :: test ();
cout << "This is Derived Class" << endl;

;
int main ()
Avledet derivenobj;
DEDIVEDOBJ.test();
return 0;

Ovennevnte kode definerer to klasser Utgangspunkt og Avledet, der den avledede klassen arver fra baseklassen. Begge klasser har en funksjon som heter test () som viser meldingen på konsollen. Test () -funksjonen i baseklassen er erklært som virtuell, noe som indikerer at den kan overstyres av avledede klasser.

I den avledede klassen overstyrer vi test () -funksjonen og kaller baseklassens test () -funksjon ved hjelp av Base :: test () å printe Dette er base Klasse til konsollen. Vi skriver deretter ut Dette er avledet klasse til konsollen etter å ha ringt basisklassens test () -funksjon.

Hvis vi oppretter et objekt av den avledede klassen og kaller test () -funksjonen, vil utgangen være Dette er base Klasse etterfulgt av Dette er avledet klasse, som indikerer at den avledede klassen har overstyrt baseklassens test () -funksjon og lagt til sin egen oppførsel.

Eksempel 3: C ++ Ring overstyret funksjon fra avledet klasse

Vi kan også kalle den overstyrte funksjonen i baseklassen utenfor klassehierarkiet ved å bruke en peker til baseklassen. Her er et eksempel:

Denne koden demonstrerer funksjon som overstyrer i C ++ ved hjelp av arv.

#inkludere
ved hjelp av navneområdet STD;
Klassebase
offentlig:
void test ()
cout << "This is Base Function" << endl;

;
Klasse avledet: offentlig base
offentlig:
void test ()
cout << "This is Derived Function" << endl;
// Ring overstyret funksjon
Base :: test ();

;
int main ()
Avledet avledet1;
avledet1.test();
return 0;

Det er to klasser definert, base og avledet. Her i ovennevnte kode er den avledede klassen avledet fra basen ved hjelp av offentlig arvespesifikator.

Begge klasser har en medlemsfunksjon som heter test(), som viser en melding på konsollen. Imidlertid, i den avledede klassen, blir test () -funksjonen overstyrt for å skrive ut en annen melding og også ringe test () -funksjonen til baseklassen ved hjelp av omfangsoppløsningsoperatøren (: :).

Hovedfunksjonen () har et objekt av avledet klasse, og dens test () -funksjonen kalles. Når test () -funksjonen blir kalt på DED1 -objektet, skriver den ut Dette er avledet funksjon til konsollen og kaller deretter test () -funksjonen til baseklassen, som skriver ut Dette er basefunksjon til konsollen.

Eksempel 4: C ++ Ring overstyret funksjon ved hjelp av peker

Vi kan også kalle den overstyrte funksjonen i baseklassen ved hjelp av en peker til den avledede klassen. Her er et eksempel:

#inkludere
ved hjelp av navneområdet STD;
Klassebase
offentlig:
void test ()
cout << "This is Base Function" << endl;

;
Klasse avledet: offentlig base
offentlig:
void test ()
cout << "This is Derived Function" << endl;

;
int main ()
Avledet avledet1;
// peker til avledet1
Base* ptr = &derived1;
// Ring Base Class Function
ptr-> test ();
return 0;

I programmet ovenfor er to klasser definert, base og avledet. Begge klasser har en medlemsfunksjon som heter test () som viser en melding på konsollen.

I hoved() Funksjon, et objekt av den avledede klassen opprettes og en peker PTR av typen base opprettes og initialiseres for å peke på det DED1 -objektet.

Test () -funksjonen blir kalt på PTR pekeren, som er av typen base. Test () -funksjonen i baseklassen kan overstyres i enhver avledet klasse ved hjelp av pekeren.

Her når test () -funksjonen blir kalt på PTR pekeren, den skriver ut Dette er basefunksjon til konsollen i stedet for Dette er avledet funksjon.

Forskjell mellom overstyring og overbelastning i C++

Overstyring og overbelastning er to viktige konsepter i objektorientert programmering. I C ++ brukes de til å gi polymorf oppførsel, som lar forskjellige objekter svare annerledes på samme melding.

Overbelastning Oppretter flere funksjoner med samme navn, men har forskjellige parametere eller argumenttyper.

Overstyre, På den annen side refererer til prosessen med å omdefinere en funksjon i en avledet klasse som inneholder samme navn som en baseklassefunksjon.

De Nøkkelforskjell Mellom overstyring og overbelastning er at overstyring innebærer å omdefinere en funksjon i en avledet klasse med samme navn og signatur som den i baseklassen. Derimot innebærer overbelastning å lage flere oppgaver med samme navn, men forskjellige parametere eller argumenttyper.

Konklusjon

De 'overstyring' I C ++ kan du sikre at funksjonen i den avledede klassen overstyrer den virtuelle funksjonen til baseklassen. Denne artikkelen diskuterer forskjellige måter å overstyre en funksjon. I C ++ kan funksjon overstyres begge veier enten fra base til avledet eller omvendt, også vi kan definere en peker til en baseklasse og overstyre en avledet funksjon på den.