Kluczowa różnica – zastępowanie a przeciążanie w C
Kluczowa różnica między przesłanianiem a przeciążaniem w C polega na tym, że powiązanie przeciążonego wywołania metody z jego definicją ma miejsce w czasie wykonywania, podczas gdy powiązanie przeciążonego wywołania metody z jego definicją ma miejsce w czasie kompilacji.
C to język programowania ogólnego przeznaczenia opracowany przez firmę Microsoft. Główną zaletą C jest to, że obsługuje programowanie zorientowane obiektowo (OOP). Jednym z filarów OOP jest polimorfizm. Daje obiektowi wiele zachowań. W polimorfizmie istnieją dwa typy znane jako nadpisywanie i przeciążanie. W tym artykule omówiono różnicę między zastępowaniem metody a przeciążaniem w języku C.
Co to jest zastępowanie w C?
Jest jeszcze jedna ważna koncepcja w OOP to dziedziczenie. Jest to wykorzystanie atrybutów i metod już istniejącej klasy. Poprawia możliwość ponownego wykorzystania kodu. Klasa już istniejąca jest klasą bazową, a nowa klasa nazywana jest klasą pochodną. W zastępowaniu polimorfizmu powinna istnieć klasa podstawowa i klasa pochodna. Powiązanie zastąpionego wywołania metody z definicją następuje w czasie wykonywania. Przykład jest następujący.
Rysunek 01: Program C z nadpisywaniem
Zgodnie z powyższym programem klasa Shape jest klasą bazową i zawiera metodę wyświetlania. Class Rectangle i Triangle są klasami pochodnymi. Te klasy pochodne mają również tę samą metodę wyświetlania z własnymi implementacjami.
Najpierw tworzona jest zmienna referencyjna obj. Wskazuje na obiekt Shape. Tak więc zostanie wykonana metoda wyświetlania klasy Shape. Następnie zmienna referencyjna wskazuje na obiekt Rectangle. Tak więc zostanie wykonana metoda wyświetlania klasy Rectangle. Wreszcie zmienna referencyjna wskazuje na obiekt Triangle. Tak więc zostanie wykonana metoda wyświetlania klasy Triangle. Metoda wyświetlania klasy bazowej jest zastępowana przez metody wyświetlania klas pochodnych.
Metoda do uruchomienia jest określana w czasie wykonywania. Klasa Shape jest napisana ze słowem kluczowym „virtual”. Klasy Rectangle i Triangle są napisane ze słowem kluczowym ‘override’. Jeśli te słowa kluczowe nie są używane, wynik wydrukuje zawartość metody wyświetlania klasy Shape dla wszystkich.
Co to jest przeciążenie w C?
W przypadku przeciążania wiele metod ma tę samą nazwę, ale różne parametry. Parametry mogą być różnych typów. Metody mogą mieć również różną liczbę parametrów. Przeciążanie metod występuje w tej samej klasie. Powiązanie przeciążonych metod z definicją odbywa się w czasie kompilacji. Zapoznaj się z poniższym programem C.
Rysunek 02: Program C z przeciążeniem
Według powyższego programu, klasa A ma dwie metody o tej samej nazwie, zwane sumą. Mają różne typy parametrów. W programie głównym tworzony jest obiekt A. Suma (2, 3) wywoła metodę sum z liczbami całkowitymi. Suma (5.1, 7.94) wywoła metodę sum z podwójnymi wartościami. Obie metody mają tę samą nazwę i taką samą liczbę parametrów. Ale typy parametrów są różne. Wymagana metoda jest odpowiednio wywoływana. Przeciążenie może również wystąpić, jeśli nazwy metod i typy parametrów są takie same, ale liczba parametrów jest inna.
Jakie jest podobieństwo między nadpisywaniem a przeciążaniem w C?
Zarówno zastępowanie, jak i przeciążanie w C to rodzaje polimorfizmu
Jaka jest różnica między nadpisywaniem a przeciążaniem w C?
Zastępowanie a przeciążanie w C |
|
Zastąpienie w C polega na zapewnieniu określonej implementacji w metodzie klasy pochodnej dla metody już istniejącej w klasie bazowej. | Przeciążanie w C polega na tworzeniu wielu metod o tej samej nazwie z różnymi implementacjami. |
Parametry | |
W C Overriding metody mają tę samą nazwę, te same typy parametrów i taką samą liczbę parametrów. | W C Overloading metody mają tę samą nazwę, ale inną liczbę parametrów lub inny typ parametrów. |
Wystąpienie | |
W C nadpisywanie występuje w klasie bazowej i klasie pochodnej. | W C przeciążanie występuje w obrębie tej samej klasy. |
Czas wiązania | |
Powiązanie nadpisanego wywołania metody z jego definicją następuje w czasie wykonywania. | Powiązanie przeciążonego wywołania metody z jego definicją następuje w czasie kompilacji. |
Synonimy | |
Zastępowanie jest nazywane polimorfizmem środowiska uruchomieniowego, polimorfizmem dynamicznym lub późnym wiązaniem. | Przeciążanie jest nazywane polimorfizmem czasu kompilacji, polimorfizmem statycznym lub wczesnym wiązaniem. |
Podsumowanie – zastępowanie a przeciążanie w C
Overriding i Overloading to dwa rodzaje polimorfizmu. Różnica między przesłanianiem a przeciążaniem w C polega na tym, że powiązanie zastąpionego wywołania metody z jego definicją ma miejsce w czasie wykonywania, podczas gdy powiązanie przeciążonego wywołania metody z jego definicją ma miejsce w czasie kompilacji.