C ++ Funktionsöverträdelse

C Function Overriding



I den här artikeln kommer vi att täcka funktionsöverstyrning i programmeringsspråket C ++. C ++ stöder körtidspolymorfism.

Vid funktionsöverstyrning omdefinierar barnklassen den funktion som redan är definierad i sin överordnade klass.







Det gör det möjligt för programmeraren att tillhandahålla härledd klassspecifik funktionalitet (även om den är definierad i basklassen).



Nu kommer vi att se några exempel och förstå funktionens överordnade koncept i C ++.



Exempel-1

Jag har definierat två klasser i nedanstående exempelkod - en basklass och en härledd klass. Basklassen har en medlemsfunktion, dvs. disp (). Derived_Class ärvs från Base_Class. Funktionen disp () finns i Base_Class och omdefinieras sedan i Derived_Class.





I huvudfunktionen () skapas ett objekt i Derived_Class, dvs d. Sedan kallar vi funktionen disp () på det härledda klassobjektet, så funktionen i den härledda klassen kommer att åberopas. Basklassversionen ignoreras här. Du kan se funktionen output as - disp () nedan i den härledda klassen.

#omfatta

med namnutrymme std;

// basklass
klass Base_Class
{
offentlig:
tomhetnytta()
{
kosta<< 'disp () funktion i basklass.' <<endl;
}

};

// härledd klass
class Derived_Class:offentlig Base_Class
{
offentlig:
tomhetnytta()
{
kosta<< 'disp () funktion i härledd klass' <<endl;
}
};

inthuvud()
{
Derived_Class d;
d.nytta(); // disp () funktion på härledda klassobjekt
lämna tillbaka 0;
}



Exempel-2

I det här exemplet kommer vi att se hur vi medvetet kan kalla basklassversionen av funktionen genom det härledda klassobjektet. I den härledda klassfunktionsdefinitionen använder vi operatören för omfattningsupplösning [::] för att anropa basklassversionen av funktionen.

#omfatta

med namnutrymme std;

klass Base_Class
{
offentlig:
tomhetnytta()
{
kosta<< 'disp () funktion i basklass.' <<endl;
}

};

class Derived_Class:offentlig Base_Class
{
offentlig:
tomhetnytta()
{
Base_Class::nytta(); // Ring basklassversionen av disp ()
}
};

inthuvud()
{
Derived_Class d;
d.nytta();
lämna tillbaka 0;
}

Exempel-3

Detta är ett annat exempel på funktionsöverstyrning. I det här exemplet har vi skapat en föräldraklass - Djur och två härledda klasser - Anka och hund. Basklassen, det vill säga djurklassen, har ett medlemsfunktionsljud ().

I den härledda klassen/barnklassen, det vill säga hund, har vi omdefinierat samma funktion, dvs. ljud (), för att åsidosätta dess basklassdefinition. På samma sätt har vi i den andra härledda klassen, det vill säga Anka, omdefinierat samma funktion, det vill säga ljud ().

I huvudfunktionen () har vi skapat hundobjektet Dog and duck of Duck. Så nu när vi kallar funktionen sound () för hund och anka, kommer den härledda klassversionen av funktionen sound () att ringa. Du kan se programmets utmatning enligt nedan. Så, med hjälp av funktionen som åsidosätter, kan vi åberopa den härledda klassspecifika funktionen.

#omfatta

med namnutrymme std;

klass djur
{
offentlig:
tomhetljud()
{
kosta<< 'Djurljud!' <<endl;
}

};

// Avledad klass - Hundklass
klass hund:offentligt djur
{
offentlig:
tomhetljud()
{
kosta<< 'Hundljud - bark.' <<endl;
}
};

// Avledad klass - Anka klass
klass Anka:offentligt djur
{
offentlig:
tomhetljud()
{
kosta<< 'Anka ljud - kvackel.' <<endl;
}
};


inthuvud()
{
Hund hund;
Anka anka;

hund.ljud(); // ljud () av ​​hund
Anka.ljud(); // ljud () av ​​anka

lämna tillbaka 0;
}

Slutsats

I den här artikeln har jag förklarat funktioner som åsidosätter C ++ . Språket C ++ stöder körtidspolymorfism. Funktionsöverstyrning hjälper till att uppnå körtidspolymorfism i C ++. Denna artikel tittade på begreppet funktionsöverstyrning och hur man uppnår körningspolymorfism med hjälp av funktionsöverstyrning.