C ++ Funktionsoverstyring

C Function Overriding



I denne artikel vil vi dække funktionsoverstyring i programmeringssproget C ++. C ++ understøtter runtime -polymorfisme.

Ved funktionsoverstyring omdefinerer underklassen den funktion, der allerede er defineret i sin forældreklasse.







Det gør det muligt for programmereren at levere afledt klassespecifik funktionalitet (selvom den er defineret i basisklassen).



Nu vil vi se et par eksempler og forstå funktionens overordnede koncept i C ++.



Eksempel-1

Jeg har defineret to klasser i nedenstående eksempelkode - en basisklasse og en afledt klasse. Basisklassen har en medlemsfunktion, dvs. disp (). Derived_Class arves fra Base_Class. Funktionen disp () er til stede i Base_Class og derefter redefineret i Derived_Class.





I hovedfunktionen () oprettes et objekt i Derived_Class, dvs. d,. Derefter kalder vi funktionen disp () på det afledte klasseobjekt, så funktionen i den afledte klasse vil blive påkaldt. Basisklasseversionen ignoreres her. Du kan se funktionen output as - disp () nedenfor i den afledte klasse.

#omfatte

ved hjælp af navneområde std;

// basisklasse
klasse Base_Class
{
offentlig:
ugyldignytte()
{
koste<< 'disp () funktion i basisklasse.' <<endl;
}

};

// afledt klasse
klasse Derived_Class:offentlig Base_Class
{
offentlig:
ugyldignytte()
{
koste<< 'disp () funktion i afledt klasse' <<endl;
}
};

intvigtigste()
{
Afledt_Klasse d;
d.nytte(); // disp () funktion på afledt klasseobjekt
Vend tilbage 0;
}



Eksempel-2

I dette eksempel vil vi se, hvordan vi bevidst kalder basisklasseversionen af ​​funktionen gennem det afledte klasseobjekt. I den afledte klassefunktionsdefinition bruger vi omfangsopløsningsoperatoren [::] til at kalde basisklasseversionen af ​​funktionen.

#omfatte

ved hjælp af navneområde std;

klasse Base_Class
{
offentlig:
ugyldignytte()
{
koste<< 'disp () funktion i basisklasse.' <<endl;
}

};

klasse Derived_Class:offentlig Base_Class
{
offentlig:
ugyldignytte()
{
Base_Class::nytte(); // Ring til basisklasseversionen af ​​disp ()
}
};

intvigtigste()
{
Afledt_Klasse d;
d.nytte();
Vend tilbage 0;
}

Eksempel-3

Dette er et andet eksempel på funktion, der tilsidesætter. I dette eksempel har vi oprettet en forældreklasse - dyr og to afledte klasser - And og hund. Basisklassen, dvs. dyreklassen, har en medlemsfunktionslyd ().

I den afledte klasse/barneklasse, dvs. hund, har vi omdefineret den samme funktion, dvs. lyd (), for at tilsidesætte dens grundklassedefinition. På samme måde har vi i den anden afledte klasse, dvs. And, omdefineret den samme funktion, dvs. lyd ().

I hovedfunktionen () har vi skabt hundeobjektet Dog and and of and. Så når vi kalder funktionen lyd () for hund og and, vil den afledte klasseversion af funktionen lyd () kalde. Du kan se programmets output som vist herunder. Så ved hjælp af funktionen, der tilsidesætter, kan vi påberåbe os den afledte klassespecifikke funktion.

#omfatte

ved hjælp af navneområde std;

klasse dyr
{
offentlig:
ugyldiglyd()
{
koste<< 'Animal lyd!' <<endl;
}

};

// Afledt klasse - Hundeklasse
klasse hund:offentligt dyr
{
offentlig:
ugyldiglyd()
{
koste<< 'Hundelyd - bark.' <<endl;
}
};

// Afledt klasse - Andeklasse
klasse And:offentligt dyr
{
offentlig:
ugyldiglyd()
{
koste<< 'Andelyd - kvaksalver.' <<endl;
}
};


intvigtigste()
{
Hund hund;
Ænder and;

hund.lyd(); // lyd () af hund
and.lyd(); // lyd () af and

Vend tilbage 0;
}

Konklusion

I denne artikel har jeg forklaret funktionsoverstyring i C ++ . C ++ - sproget understøtter runtime polymorfisme. Funktionsoverstyring hjælper med at opnå løbetiden polymorfisme i C ++. Denne artikel kiggede på begrebet funktionsoverstyring og hvordan man opnår runtime polymorfisme ved hjælp af funktionsoverstyring.