A függvény felülbírálásakor a gyermekosztály újradefiniálja a szülőosztályában már definiált függvényt.
Lehetővé teszi a programozó számára, hogy származtatott osztály-specifikus funkciókat biztosítson (annak ellenére, hogy az alaposztályban van meghatározva).
Most látni fogunk néhány példát, és megértjük a funkció felülírásának koncepcióját a C ++ nyelven.
1. példa
Az alábbi példakódban két osztályt definiáltam - egy alaposztályt és egy származtatott osztályt. Az alaposztálynak tagfüggvénye van, azaz disp (). A Derived_Class öröklődik a Base_Class -tól. A disp () függvény jelen van a Base_Class -ban, majd újradefiniálva a Derived_Class -ban.
A fő () függvényben a Derived_Class objektum, azaz d jön létre. Ezután a származtatott osztályobjektumon meghívjuk a disp () függvényt, így a származtatott osztály függvényét hívjuk meg. Az alaposztályú verzió itt figyelmen kívül marad. Az alábbiakban láthatja a kimeneti as - disp () függvényt a származtatott osztályban.
#befoglalninévtér standard használatával;
// alaposztály
osztály Base_Class
{
nyilvános:
üresigénybe()
{
költség<< 'disp () függvény az alaposztályban.' <<endl;
}
};
// származtatott osztály
osztály Derived_Class:public Base_Class
{
nyilvános:
üresigénybe()
{
költség<< 'disp () függvény a származtatott osztályban' <<endl;
}
};
intfő-()
{
Derived_Class d;
d.igénybe(); // disp () függvény a származtatott osztályobjektumon
Visszatérés 0;
}
2. példa
Ebben a példában látni fogjuk, hogyan lehet szándékosan meghívni a függvény alaposztályú verzióját a származtatott osztályobjektumon keresztül. A származtatott osztályfüggvény definícióban a [::] hatókörű felbontási operátort használjuk a függvény alaposztályú verziójának meghívására.
#befoglalninévtér standard használatával;
osztály Base_Class
{
nyilvános:
üresigénybe()
{
költség<< 'disp () függvény az alaposztályban.' <<endl;
}
};
osztály Derived_Class:public Base_Class
{
nyilvános:
üresigénybe()
{
Base_Class::igénybe(); // Hívja meg a disp () alaposztályú verzióját
}
};
intfő-()
{
Derived_Class d;
d.igénybe();
Visszatérés 0;
}
3. példa
Ez egy másik példa a funkció felülbírálására. Ebben a példában létrehoztunk egy szülőosztályt - Állat és két származtatott osztályt - Kacsa és Kutya. Az alaposztály, azaz az Animal osztály tagfüggvény hanggal rendelkezik ().
A származtatott osztály/gyermek osztályban, azaz Kutya, ugyanazt a függvényt, azaz a hangot () újradefiniáltuk, hogy felülírjuk az alaposztály definícióját. Hasonlóképpen, a másik származtatott osztályban, azaz a Kacsában is ugyanazt a függvényt definiáltuk újra, azaz a hangot ().
A fő () függvényben létrehoztuk a Dog and Duck of Duck kutyaobjektumot. Tehát most, amikor a hang () függvényt kutyának és kacsának hívjuk, a hang () függvény származtatott osztályváltozata hívja. A program kimenetét az alábbiak szerint láthatja. Tehát a függvény felülbírálása segítségével meghívhatjuk a származtatott osztály-specifikus függvényt.
#befoglalninévtér standard használatával;
osztályú állat
{
nyilvános:
üreshang()
{
költség<< - Állati hang! <<endl;
}
};
// Származtatott osztály - Kutya osztály
osztályú Kutya:nyilvános állat
{
nyilvános:
üreshang()
{
költség<< - Kutyahang - ugat. <<endl;
}
};
// Származtatott osztály - Kacsa osztály
osztályú Kacsa:nyilvános állat
{
nyilvános:
üreshang()
{
költség<< - Kacsahang - csicska. <<endl;
}
};
intfő-()
{
Kutya kutya;
Kacsakacsa;
kutya.hang(); // hang () a kutya
kacsa.hang(); // sound () of kacsa
Visszatérés 0;
}
Következtetés
Ebben a cikkben elmagyaráztam a funkció felülbírálását C ++ . A C ++ nyelv támogatja a futásidejű polimorfizmust. A funkció felülbírálása segít elérni a futási idő polimorfizmusát C ++ nyelven. Ez a cikk megvizsgálta a függvények felülbírálásának fogalmát és azt, hogyan lehet elérni a futásidejű polimorfizmust a függvény felülbírálásával.