U nadjačavanju funkcije, podređena klasa redefinira funkciju koja je već definirana u svojoj roditeljskoj klasi.
Omogućuje programeru pružanje izvedene funkcionalnosti specifične za klasu (iako je definirana u osnovnoj klasi).
Sada ćemo vidjeti nekoliko primjera i razumjeti koncept nadjačavanja funkcija u C ++.
Primjer-1
U donjem primjeru koda definirao sam dvije klase - osnovnu klasu i izvedenu klasu. Osnovna klasa ima funkciju člana, tj. Disp (). Derived_Class je naslijeđen od Base_Class. Funkcija disp () prisutna je u Base_Class, a zatim je redefinirana u Derived_Class.
U funkciji main () stvara se objekt Derived_Class, tj. D. Zatim pozivamo funkciju disp () na objektu izvedene klase, pa će se pozvati funkcija u izvedenoj klasi. Ovdje se zanemaruje verzija osnovne klase. Ispod možete vidjeti izlaz kao - disp () funkciju u izvedenoj klasi.
#uključikoristeći imenski prostor std;
// osnovna klasa
klasa Base_Class
{
javnost:
poništitidobitak()
{
trošak<< 'disp () funkcija u osnovnoj klasi.' <<endl;
}
};
// izvedena klasa
klasa Izvedena_klasa:javna Baza_Klasa
{
javnost:
poništitidobitak()
{
trošak<< 'disp () funkcija u izvedenoj klasi' <<endl;
}
};
intglavni()
{
Izvedena_razred d;
d.dobitak(); // disp () funkcija na izvedenom objektu klase
povratak 0;
}
Primjer-2
U ovom primjeru vidjet ćemo kako namjerno pozvati verziju funkcije osnovne klase kroz objekt izvedene klase. U izvedenoj definiciji funkcije klase koristimo operator razrješenja opsega [::] za pozivanje verzije funkcije osnovne klase.
#uključikoristeći imenski prostor std;
klasa Base_Class
{
javnost:
poništitidobitak()
{
trošak<< 'disp () funkcija u osnovnoj klasi.' <<endl;
}
};
klasa Izvedena_klasa:javna Baza_Klasa
{
javnost:
poništitidobitak()
{
Base_Class::dobitak(); // Poziv verzije osnovne klase disp ()
}
};
intglavni()
{
Izvedena_razred d;
d.dobitak();
povratak 0;
}
Primjer-3
Ovo je još jedan primjer nadjačavanja funkcije. U ovom primjeru stvorili smo roditeljsku klasu - Animal i dvije izvedene klase - Duck and Dog. Osnovna klasa, tj. Klasa Animal, ima funkciju člana sound ().
U izvedenoj klasi klasa/dijete, tj. Dog, redefinirali smo istu funkciju, tj. Zvuk (), kako bismo nadjačali njenu definiciju osnovne klase. Slično, u drugoj izvedenoj klasi, tj. Patki, redefinirali smo istu funkciju, tj. Zvuk ().
U funkciji main () stvorili smo objekt psa psa i patke patke. Dakle, sada kada pozovemo funkciju sound () za psa i patku, pozvat će se izvedbena verzija funkcije sound (). Rezultate programa možete vidjeti kao što je prikazano u nastavku. Dakle, uz pomoć nadjačavanja funkcije možemo pozvati izvedenu funkciju specifičnu za klasu.
#uključikoristeći imenski prostor std;
razred Životinja
{
javnost:
poništitizvuk()
{
trošak<< 'Životinjski zvuk!' <<endl;
}
};
// Izvedena klasa - Klasa pasa
razred Pas:javna Životinja
{
javnost:
poništitizvuk()
{
trošak<< 'Zvuk psa - lavež.' <<endl;
}
};
// Izvedena klasa - Klasa patka
klasa Patka:javna Životinja
{
javnost:
poništitizvuk()
{
trošak<< 'Zvuk patke - kvoca.' <<endl;
}
};
intglavni()
{
Pas pas;
Patka patka;
pas.zvuk(); // zvuk () psa
patka.zvuk(); // zvuk () patke
povratak 0;
}
Zaključak
U ovom članku objasnio sam premošćivanje funkcije C ++ . Jezik C ++ podržava polimorfizam za vrijeme izvođenja. Nadjačavanje funkcija pomaže u postizanju polimorfizma vremena izvođenja u C ++. Ovaj članak je razmotrio koncept nadjačavanja funkcija i kako postići polimorfizam tijekom izvođenja pomoću nadjačavanja funkcija.