Dynamiczne wiązanie w C++: wyjaśnienie, funkcje i implementacja

Opublikowany: 2021-02-04

Spis treści

Wstęp

Ten artykuł przeprowadzi Cię przez działanie dynamicznego wiązania w C++ . Oczekuje się, że będziesz mieć podstawową wiedzę na temat działania dziedziczenia i wiązania statycznego w C++. Dzieje się tak, ponieważ niektóre ograniczenia wiązania statycznego są usuwane przez wiązanie dynamiczne. Pokażemy Ci, wraz z poprawnymi i prostymi kodami, jak przydatne jest dynamiczne wiązanie.

Co to jest wiązanie dynamiczne?

Przez wiązanie ogólnie rozumiemy łączenie jednego obiektu z drugim. Pod względem języków programowania wiązanie nie różni się zbytnio. Jest to połączenie definicji funkcji i wywołania funkcji. Ale dlaczego „dynamiczny”? Mówiąc prościej, dynamiczne wiązanie polega po prostu na opóźnianiu wyboru lub wyboru funkcji do uruchomienia do czasu jej uruchomienia. Używając dynamicznego wiązania w C++ , wybieramy, którą funkcję możemy wykonać w oparciu o podstawowy typ obiektu.

Ta elastyczność nie była zapewniona programistom ze statycznym wiązaniem. Powiązanie statyczne miało miejsce w czasie kompilacji, a nie w czasie wykonywania. Dodatkowo, statyczne wiązanie tworzyło połączenie wywołania funkcji i definicji w czasie kompilacji, podczas gdy, jak już wiesz, dynamiczne wiązanie nie robi tego do czasu uruchomienia.

Wiązanie dynamiczne pozwala nam zignorować różnice typów, zapewniając nam elastyczność w wyborze typu funkcji, której potrzebujemy w danym momencie działania. Analizując tę ​​instrukcję, możemy zrozumieć, że dynamiczne wiązanie pozwala nam obsługiwać różne obiekty przy użyciu tylko jednej nazwy funkcji. Zmniejsza to złożoność kodu, a także umożliwia programiście łatwiejszy czas podczas debugowania.

Funkcje wirtualne

Dużo mówiliśmy o dynamicznym wiązaniu w C++ . Ale jak to zrobić? Aby zaimplementować dynamiczne wiązanie w kodzie C++, musisz użyć „funkcji wirtualnych”. Czym więc są funkcje wirtualne?

W tym artykule nie będziemy się zagłębiać w funkcje wirtualne, ponieważ są one wystarczająco ważne, by stworzyć osobny artykuł. Otrzymasz jednak wystarczającą ilość informacji o funkcjach wirtualnych, aby jasno zrozumieć dynamiczne wiązanie.

Funkcje wirtualne to specjalne funkcje członkowskie, do których wywołania wykonane za pomocą wskaźnika (lub odwołania) są rozwiązywane w czasie wykonywania na podstawie typu obiektu ze wskaźnikiem. W prostych słowach, jeśli zdefiniujesz funkcję wirtualną w klasie bazowej, możesz przesłonić funkcję w klasach pochodnych.

Na tym polega moc funkcji wirtualnych. W C++ funkcję wirtualną definiuje się za pomocą słowa kluczowego „virtual” na początku definicji funkcji. Być może nie będziesz musiał powtarzać słowa kluczowego virtual dla każdej klasy pochodnej klasy bazowej, ponieważ gdy funkcja zostanie zadeklarowana jako „wirtualna”, pozostanie „wirtualna” we wszystkich klasach pochodnych.

Implementacja C++

Chodzi o funkcje wirtualne. Przyjrzyjmy się teraz programowi do zrozumienia dynamicznego wiązania w C++ :

Program nr 1 :

Widzimy dwie klasy: — Klasa A jest klasą „podstawową”, podczas gdy Klasa B jest „klasą pochodną”. Wewnątrz obu klas znajduje się jedna funkcja o tej samej nazwie „display”. W klasie nadrzędnej istnieje inna funkcja o nazwie final_print() wywołująca funkcję display(). W funkcji main() tworzymy dwa różne obiekty dla dwóch różnych klas, wywołując tę ​​samą funkcję display().

Zobaczmy wyjście powyższego programu.

Dane wyjściowe dla programu nr 1:

Zgodnie z oczekiwaniami, dane wyjściowe wykonują funkcję display() klasy bazowej dwa razy zgodnie z definicją w czasie kompilacji (wiązanie statyczne). Ale nie o to nam chodziło.

Teraz, aby przekonwertować powyższy kod na wiązanie dynamiczne, musimy użyć funkcji wirtualnych. Zobaczmy, jak to zrobić.

Program #2:

Po prostu dodajemy słowo kluczowe „virtual” dla obu naszych funkcji display() w klasie A i klasie B, dzięki czemu stają się one funkcjami wirtualnymi. To jedyna potrzebna zmiana. Tak jak poprzednio, wywołujemy tę samą funkcję final_print() przy użyciu dwóch różnych obiektów. Zobaczmy, jaki wynik otrzymamy teraz.

Dane wyjściowe dla programu nr 2 :

To jest wynik, którego chcieliśmy, i otrzymaliśmy go za pomocą dynamicznego wiązania funkcji.

Ucz się kursów oprogramowania online z najlepszych światowych uniwersytetów. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.

Wniosek

W tym artykule omówiliśmy koncepcję dynamicznego wiązania w C++ . Podsumowując, dynamiczne wiązanie pozwala nam na elastyczność, wywołując pojedynczą funkcję do obsługi różnych obiektów. Jak widać z naszego kodu, wywołaliśmy tę samą funkcję display(), tworząc dwa różne obiekty, które dają nam dwa różne wyniki. Jest to możliwe, ponieważ wiązanie dynamiczne ma miejsce w czasie wykonywania, w przeciwieństwie do wiązania statycznego, które ma miejsce w czasie kompilacji.

Jeśli chcesz dowiedzieć się więcej o rozwoju pełnego stosu, zapoznaj się z programem Executive PG UpGrad i IIIT-B w zakresie programowania pełnego stosu, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznych szkoleń, ponad 9 projektów i zadań , status absolwentów IIIT-B, praktyczne, praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.

Co to jest język programowania C++?

C++ to język programowania ogólnego przeznaczenia. Jest to jeden z najczęściej używanych języków programowania na świecie. C++ jest rozszerzoną wersją języka C i zapewnia udogodnienia ułatwiające programowanie obiektowe. C++ jest językiem programowania ogólnego przeznaczenia, podczas gdy C jest językiem programowania specjalnego przeznaczenia. C++ został stworzony jako rozszerzenie C do obsługi programowania obiektowego i służy do tworzenia aplikacji desktopowych, aplikacji na urządzenia mobilne, systemów wbudowanych i czasu rzeczywistego oraz aplikacji i usług internetowych. C++ jest imperatywnym, proceduralnym, wieloparadygmatycznym, skompilowanym językiem programowania ogólnego przeznaczenia. Obsługuje programowanie strukturalne, programowanie obiektowe i programowanie ogólne. Ma dynamiczny system typów i jawne zarządzanie pamięcią.

Co to jest programowanie obiektowe?

OOP to sposób na tworzenie kodu wielokrotnego użytku, łatwego w utrzymaniu i czytelnego. Krótko mówiąc, OOP to paradygmat programowania, który opiera się na projektowaniu oprogramowania wokół obiektów świata rzeczywistego. Na przykład w Javie, jeśli chcesz zaprojektować oprogramowanie, które zajmuje się książkami, tworzysz klasę o nazwie Book, a następnie tworzysz oddzielne instancje (obiekty) tej klasy reprezentujące pojedynczą książkę. To samo dotyczy innych klas, które musisz stworzyć w oprogramowaniu.

Co to jest wiązanie dynamiczne w C++?

Wiązanie dynamiczne wiąże znaczenie identyfikatora w tekście programu z definicją tego identyfikatora znalezioną w czasie wykonywania. To skojarzenie znaczeniowe nazywa się wiązaniem. Jest to podstawowa zasada programowania obiektowego. Dynamicznie powiązane identyfikatory to gałęzie i liście hierarchii klas zorientowanej obiektowo. Są dynamiczne, ponieważ są rozwiązywane w czasie wykonywania, a nie w czasie kompilacji. Gałęzie i liście hierarchii klas zorientowanych obiektowo są dynamiczne, ponieważ są powiązane z klasami od nich pochodzącymi.