Klíčový rozdíl – přepsání vs přetížení v C
Klíčový rozdíl mezi přepsáním a přetížením v C je ten, že k navázání přepsaného volání metody na její definici dochází za běhu, zatímco k navázání přetíženého volání metody na její definici dochází v době kompilace.
C je univerzální programovací jazyk vyvinutý společností Microsoft. Hlavní výhodou C je, že podporuje objektově orientované programování (OOP). Jedním z pilířů OOP je polymorfismus. To dává objektu, aby měl vícero chování. V polymorfismu existují dva typy známé jako přepisování a přetěžování. Tento článek popisuje rozdíl mezi přepsáním metody a přetížením v C.
Co je v C nadřazené?
Ještě jeden důležitý koncept v OOP je dědičnost. Je to použití atributů a metod již existující třídy. Zlepšuje znovupoužitelnost kódu. Již existující třída je základní třída a nová třída je známá jako odvozená třída. Při potlačení polymorfismu by měla existovat základní třída a odvozená třída. K navázání přepsaného volání metody na definici dochází za běhu. Příklad je následující.
Obrázek 01: Program C s přepisováním
Podle výše uvedeného programu je třída Shape základní třídou a obsahuje metodu zobrazení. Class Rectangle a Triangle jsou odvozené třídy. Tyto odvozené třídy mají také stejný způsob zobrazení s vlastními implementacemi.
Nejprve se vytvoří referenční proměnná obj. Ukazuje na objekt Shape. Spustí se tedy metoda zobrazení třídy Shape. Potom referenční proměnná ukazuje na objekt Rectangle. Spustí se tedy metoda zobrazení třídy Rectangle. Nakonec referenční proměnná ukazuje na objekt Triangle. Spustí se tedy metoda zobrazení třídy Triangle. Metoda zobrazení základní třídy je přepsána metodami zobrazení odvozených tříd.
O způsobu spuštění se rozhoduje za běhu. Třída Shape je napsána s klíčovým slovem „virtuální“. Třídy Rectangle a Triangle jsou psány s klíčovým slovem „override“. Pokud tato klíčová slova nepoužijete, výstup vytiskne obsah metody zobrazení třídy Shape pro všechny.
Co je přetížení v C?
Při přetížení má více metod stejný název, ale s různými parametry. Parametry mohou být různého typu. Metody mohou mít také různý počet parametrů. K přetížení metody dochází ve stejné třídě. K navázání přetížených metod na definici dochází v době kompilace. Viz níže uvedený program C.
Obrázek 02: Program C s přetížením
Podle výše uvedeného programu má třída A dvě metody se stejným názvem nazvané sum. Mají různé typy parametrů. V hlavním programu je vytvořen objekt A. Součet (2, 3) vyvolá metodu součtu s celými čísly. Součet (5.1, 7.94) vyvolá metodu součtu s dvojnásobnými hodnotami. Obě metody mají stejný název a stejný počet parametrů. Ale typy parametrů jsou různé. Požadovaná metoda se nazývá odpovídajícím způsobem. K přetížení může také dojít, pokud jsou názvy metod a typy parametrů stejné, ale počet parametrů je odlišný.
Jaká je podobnost mezi přepsáním a přetížením v C?
Přepisování i přetěžování v C jsou typy polymorfismu
Jaký je rozdíl mezi přepsáním a přetížením v C?
Přepisování vs přetěžování v C |
|
Přepsáním v C je poskytnout specifickou implementaci v metodě odvozené třídy pro metodu, která již existuje v základní třídě. | Přetížení v C znamená vytvoření více metod se stejným názvem s různými implementacemi. |
Parametry | |
V přepisování C mají metody stejný název, stejné typy parametrů a stejný počet parametrů. | V C Overloading mají metody stejný název, ale jiný počet parametrů nebo jiný typ parametrů. |
Výskyt | |
V C dochází k přepsání v rámci základní třídy a odvozené třídy. | V C dochází k přetížení ve stejné třídě. |
Doba vazby | |
Vazba přepsaného volání metody na její definici probíhá za běhu. | Vazba přetíženého volání metody na její definici probíhá v době kompilace. |
Synonyma | |
Přepisování se nazývá runtime polymorfismus, dynamický polymorfismus nebo pozdní vazba. | Přetížení se nazývá polymorfismus v době kompilace, statický polymorfismus nebo časná vazba. |
Shrnutí – Přepisování vs přetěžování v C
Overriding a Overloading jsou dva typy polymorfismu. Rozdíl mezi přepsáním a přetížením v C je v tom, že k navázání volání přepsané metody na její definici dochází za běhu, zatímco k navázání přetíženého volání metody na její definici dochází v době kompilace.