Kľúčový rozdiel – prepisovanie vs. preťaženie v jazyku C
Kľúčový rozdiel medzi prepisovaním a preťažením v C je v tom, že k viazaniu volania prepísanej metódy na jej definíciu dochádza za behu, zatiaľ čo k viazaniu preťaženého volania metódy na jej definíciu dochádza v čase kompilácie.
C je univerzálny programovací jazyk vyvinutý spoločnosťou Microsoft. Hlavnou výhodou C je, že podporuje objektovo orientované programovanie (OOP). Jedným z pilierov OOP je polymorfizmus. To dáva objektu viacnásobné správanie. V polymorfizme existujú dva typy známe ako prepisovanie a preťaženie. Tento článok popisuje rozdiel medzi prepisovaním metódy a preťažením v C.
Čo má prednosť v C?
Ďalším dôležitým pojmom v OOP je dedičnosť. Je to použitie atribútov a metód už existujúcej triedy. Zlepšuje znovupoužiteľnosť kódu. Už existujúca trieda je základná trieda a nová trieda je známa ako odvodená trieda. Pri prepisovaní polymorfizmu by mala existovať základná trieda a odvodená trieda. Väzba volania prepísanej metódy na definíciu prebieha za behu. Príklad je nasledujúci.
Obrázok 01: Program C s prepisovaním
Podľa vyššie uvedeného programu je trieda Shape základnou triedou a obsahuje metódu zobrazenia. Class Rectangle a Triangle sú odvodené triedy. Tieto odvodené triedy majú tiež rovnaký spôsob zobrazenia s vlastnými implementáciami.
Najprv sa vytvorí referenčná premenná obj. Ukazuje na objekt Shape. Spustí sa teda metóda zobrazenia triedy Shape. Potom referenčná premenná ukazuje na objekt Rectangle. Spustí sa teda metóda zobrazenia triedy Rectangle. Nakoniec referenčná premenná ukazuje na objekt Triangle. Spustí sa teda metóda zobrazenia triedy Triangle. Metóda zobrazenia základnej triedy je prepísaná metódami zobrazenia odvodených tried.
O spôsobe spustenia sa rozhoduje pri spustení. Trieda Shape je napísaná pomocou kľúčového slova „virtuálne“. Triedy Rectangle a Triangle sú napísané s kľúčovým slovom „override“. Ak tieto kľúčové slová nepoužijete, výstup vytlačí obsah metódy zobrazenia triedy Shape pre všetkých.
Čo je preťaženie v C?
Pri preťažení má viacero metód rovnaký názov, ale s rôznymi parametrami. Parametre môžu byť rôznych typov. Metódy môžu mať aj rôzny počet parametrov. Preťaženie metódy sa vyskytuje v rovnakej triede. Väzba preťažených metód na definíciu prebieha v čase kompilácie. Pozrite si nižšie uvedený program C.
Obrázok 02: C Program s preťažením
Podľa vyššie uvedeného programu má trieda A dve metódy s rovnakým názvom nazývané sum. Majú rôzne typy parametrov. V hlavnom programe sa vytvorí objekt A. Súčet (2, 3) vyvolá metódu súčtu s celými číslami. Súčet (5.1, 7.94) vyvolá metódu súčtu s dvojnásobnými hodnotami. Obe metódy majú rovnaký názov a rovnaký počet parametrov. Ale typy parametrov sú rôzne. Požadovaná metóda sa volá zodpovedajúcim spôsobom. Preťaženie môže nastať aj vtedy, ak sú názvy metód a typy parametrov rovnaké, ale počet parametrov je odlišný.
Aká je podobnosť medzi prepisovaním a preťažovaním v C?
Prepisovanie aj preťažovanie v C sú typy polymorfizmu
Aký je rozdiel medzi prepisovaním a preťažovaním v C?
Prepisovanie vs. preťaženie v jazyku C |
|
Nahradením v C je poskytnúť špecifickú implementáciu v metóde odvodenej triedy pre metódu, ktorá už existuje v základnej triede. | Preťaženie v C znamená vytvorenie viacerých metód s rovnakým názvom s rôznymi implementáciami. |
Parametre | |
V prepisovaní C majú metódy rovnaký názov, rovnaké typy parametrov a rovnaký počet parametrov. | V C Overloading majú metódy rovnaký názov, ale iný počet parametrov alebo iný typ parametrov. |
Výskyt | |
V C sa prepísanie vyskytuje v rámci základnej triedy a odvodenej triedy. | V C dochádza k preťaženiu v rámci rovnakej triedy. |
Čas viazanosti | |
Väzba volania prepísanej metódy s jej definíciou prebieha za behu. | Väzba preťaženého volania metódy na jej definíciu prebieha v čase kompilácie. |
Synonymá | |
Prepisovanie sa nazýva runtime polymorfizmus, dynamický polymorfizmus alebo neskorá väzba. | Preťaženie sa nazýva polymorfizmus v čase kompilácie, statický polymorfizmus alebo skorá väzba. |
Summary – Overriding vs Overloading in C
Overriding a Overloading sú dva typy polymorfizmu. Rozdiel medzi prepisovaním a preťažením v C je v tom, že k naviazaniu volania prepísanej metódy na jej definíciu dochádza za behu, zatiaľ čo k viazaniu preťaženého volania metódy na jej definíciu dochádza v čase kompilácie.