Prepísanie funkcie C ++

C Function Overriding



V tomto článku sa budeme zaoberať prepísaním funkcií v programovacom jazyku C ++. C ++ podporuje runtime polymorfizmus.

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.