Pri prepísaní funkcie podradená trieda predefinuje funkciu, ktorá je už definovaná v jej nadradenej triede.
Umožňuje programátorovi poskytovať odvodené funkcie špecifické pre triedu (aj keď sú definované v základnej triede).
Teraz uvidíme niekoľko príkladov a porozumieme konceptu, ktorý prevažuje v C ++.
Príklad-1
V nasledujúcom príklade kódu som definoval dve triedy - základnú triedu a odvodenú triedu. Základná trieda má členskú funkciu, tj. Disp (). Derived_Class je zdedená zo Base_Class. Funkcia disp () je prítomná v Base_Class a potom predefinovaná v Derived_Class.
Vo funkcii main () je vytvorený objekt triedy Derived_Class, t.j. d. Potom na objekte odvodenej triedy zavoláme funkciu disp (), takže bude vyvolaná funkcia v odvodenej triede. Verzia základnej triedy sa tu ignoruje. Nižšie môžete vidieť funkciu výstupu ako - disp () v odvodenej triede.
#zahrnúťpomocou priestoru názvov std;
// základná trieda
trieda Base_Class
{
verejná:
prázdnyvyužiť()
{
náklady<< „funkcia disp () v základnej triede.“ <<endl;
}
};
// odvodená trieda
trieda Derived_Class:public Base_Class
{
verejná:
prázdnyvyužiť()
{
náklady<< „funkcia disp () v odvodenej triede“ <<endl;
}
};
intHlavná()
{
Derived_Class d;
d.využiť(); // funkcia disp () na odvodenom objekte triedy
vrátiť sa 0;
}
Príklad-2
V tomto prípade uvidíme, ako zámerne nazvať verziu funkcie v základnej triede prostredníctvom objektu odvodenej triedy. V definícii funkcie odvodenej triedy používame operátor rozlíšenia rozsahu [::] na volanie verzie funkcie v základnej triede.
#zahrnúťpomocou priestoru názvov std;
trieda Base_Class
{
verejná:
prázdnyvyužiť()
{
náklady<< „funkcia disp () v základnej triede.“ <<endl;
}
};
trieda Derived_Class:public Base_Class
{
verejná:
prázdnyvyužiť()
{
Základná_trieda::využiť(); // Zavolajte na verziu disp () základnej triedy
}
};
intHlavná()
{
Derived_Class d;
d.využiť();
vrátiť sa 0;
}
Príklad-3
Toto je ďalší príklad prepísania funkcií. V tomto prípade sme vytvorili rodičovskú triedu - zviera a dve odvodené triedy - kačicu a psa. Základná trieda, t.j. trieda zvierat, má členskú funkciu sound ().
V odvodenej triede/podradenej triede, tj. V prípade psa, sme predefinovali rovnakú funkciu, tj. Zvuk (), aby sme prepísali definíciu svojej základnej triedy. Podobne v druhej odvodenej triede, tj. Káčere, sme predefinovali rovnakú funkciu, tj. Zvuk ().
V hlavnej funkcii () sme vytvorili psí predmet Pes a kačica kačica. Takže teraz, keď zavoláme funkciu sound () pre psy a kačice, zavolá odvodená verzia funkcie sound (). Výstup programu môžete vidieť nižšie. Pomocou prepísanej funkcie teda môžeme vyvolať odvodenú funkciu špecifickú pre triedu.
#zahrnúťpomocou priestoru názvov std;
triedy Zviera
{
verejná:
prázdnyzvuk()
{
náklady<< „Zvuk zvierat!“ <<endl;
}
};
// Odvodená trieda - trieda psov
triedny pes:verejné Zviera
{
verejná:
prázdnyzvuk()
{
náklady<< 'Zvuk psa - štekot.' <<endl;
}
};
// Odvodená trieda - kačacia trieda
triedna kačka:verejné Zviera
{
verejná:
prázdnyzvuk()
{
náklady<< 'Kačací zvuk - šarlatánstvo.' <<endl;
}
};
intHlavná()
{
Pes pes;
Kačacia kačica;
pes.zvuk(); // zvuk () psa
kačica.zvuk(); // zvuk () kačky
vrátiť sa 0;
}
Záver
V tomto článku som vysvetlil nahradenie funkcie C ++ . Jazyk C ++ podporuje runtime polymorfizmus. Prepísanie funkcií pomáha dosiahnuť polymorfizmus za behu v C ++. Tento článok sa zameral na koncept prepísania funkcie a na to, ako dosiahnuť runtime polymorfizmus pomocou prepísania funkcie.