Legarea dinamică în C++: explicație, funcții și implementare

Publicat: 2021-02-04

Cuprins

Introducere

Acest articol vă va ghida prin modul de funcționare a legării dinamice în C++ . Se așteaptă să aveți cunoștințe de bază despre funcționarea moștenirii și a legării statice în C++. Acest lucru se datorează faptului că unele limitări ale legării statice sunt eliminate prin legarea dinamică. Vă vom arăta, împreună cu coduri adecvate și simple, cât de utilă este legarea dinamică.

Ce este Dynamic Binding?

Prin legare, înțelegem în general legarea unui obiect cu altul. În ceea ce privește limbajele de programare, legarea nu este foarte diferită. Este legătura dintre o definiție de funcție și un apel de funcție. Dar de ce „dinamic”? Cu cuvinte simple, legarea dinamică întârzie doar alegerea sau selectarea funcției care trebuie rulată până la momentul executării acesteia. Folosind legarea dinamică în C++ , alegem ce funcție putem executa în funcție de tipul de bază al obiectului.

Această flexibilitate nu a fost oferită programatorilor cu legături statice. Legarea statică avea loc în timpul compilării și nu în timpul rulării. În plus, legarea statică a făcut legătura între apelul și definirea funcției în timpul compilării, în timp ce, după cum știți acum, legarea dinamică nu face asta până în timpul execuției.

Legarea dinamică ne permite să ignorăm diferențele de tip, oferindu-ne flexibilitatea în alegerea tipului de funcție de care avem nevoie în acel moment de rulare. Examinând această declarație, putem înțelege că legarea dinamică ne permite să gestionăm diferite obiecte folosind doar un singur nume de funcție. Acest lucru reduce complexitatea codului și, de asemenea, permite programatorului să aibă un timp mai ușor în timpul depanării.

Funcții virtuale

Am vorbit mult despre legarea dinamică în C++ . Dar cum să procedezi cu asta? Pentru a implementa legarea dinamică în codul dvs. C++, trebuie să utilizați „funcții virtuale”. Deci, ce sunt funcțiile virtuale?

Acest articol nu va aborda pe larg funcțiile virtuale, deoarece acestea sunt suficient de importante pentru un articol separat. Dar vi se vor furniza suficiente informații despre funcțiile virtuale pentru a înțelege în mod clar legarea dinamică.

Funcțiile virtuale sunt funcții membre speciale la care apelurile efectuate printr-un pointer (sau referință) sunt rezolvate în timpul execuției, în funcție de tipul obiectului cu pointerul. Cu cuvinte simple, dacă definiți o funcție virtuală într-o clasă de bază, puteți suprascrie funcția din clasele derivate.

Aceasta este puterea funcțiilor virtuale. În C++, definiți o funcție virtuală folosind cuvântul cheie „virtual” la începutul definiției funcției. Este posibil să nu trebuiască să repetați cuvântul cheie virtual pentru fiecare clasă derivată a unei clase de bază, deoarece odată ce o funcție este declarată „virtuală”, aceasta va rămâne „virtuală” în toate clasele derivate.

Implementare C++

Este vorba despre funcții virtuale. Acum să ne uităm la un program pentru a înțelege legarea dinamică în C++ :

Programul #1 :

Vedem două clase: - Clasa A este clasa „de bază”, în timp ce Clasa B este „clasa derivată”. În ambele clase, există o funcție cu același nume „afișare”. În clasa părinte, există o altă funcție numită final_print() care apelează funcția display(). În funcția main(), facem două obiecte diferite pentru două clase diferite, apelând aceeași funcție display().

Să vedem rezultatul programului de mai sus.

Ieșire pentru programul #1:

După cum era de așteptat, ieșirea execută funcția display() a clasei de bază de două ori așa cum este definită la momentul compilării (legare statică). Dar aceasta nu este rezultatul pe care ne-am dorit-o.

Acum, pentru a converti codul de mai sus într-unul de legare dinamică, trebuie să folosim funcții virtuale. Să vedem cum să facem asta.

Programul #2:

Adăugăm doar cuvântul cheie „virtual” pentru ambele funcții display() din Clasa A și Clasa B, făcându-le astfel funcții virtuale. Aceasta este singura schimbare necesară. La fel ca înainte, apelăm aceeași funcție final_print() folosind două obiecte diferite. Să vedem ce rezultate obținem acum.

Ieșire pentru programul #2 :

Aceasta este rezultatul pe care ne-am dorit-o și am obținut-o folosind legarea dinamică a funcțiilor.

Învață cursuri de software online de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Concluzie

În acest articol, am trecut prin conceptul de legare dinamică în C++ . Pentru a rezuma, legarea dinamică ne permite flexibilitate prin apelarea unei singure funcții pentru a gestiona diferite obiecte. După cum este evident din codul nostru, am numit aceeași funcție display() făcând două obiecte diferite pentru a ne oferi două ieșiri diferite. Acest lucru este posibil deoarece legarea dinamică are loc în timpul execuției, spre deosebire de legarea statică care are loc în timpul compilării.

Dacă sunteți interesat să aflați mai multe despre dezvoltarea full-stack, consultați programul Executive PG de la upGrad și IIIT-B în dezvoltarea software full-stack, care este conceput pentru profesioniști care lucrează și oferă peste 500 de ore de formare riguroasă, peste 9 proiecte și misiuni. , Statut de absolvenți IIIT-B, proiecte practice practice și asistență pentru locuri de muncă cu firme de top.

Ce este limbajul de programare C++?

C++ este un limbaj de programare de uz general. Este unul dintre cele mai utilizate limbaje de programare din lume. C++ este o versiune îmbunătățită a limbajului C și oferă facilități care facilitează programarea orientată pe obiecte. C++ este un limbaj de programare cu scop general, în timp ce C este un limbaj de programare cu scop special. C++ a fost creat ca o extensie a C pentru a sprijini programarea orientată pe obiecte și este folosit pentru a dezvolta aplicații desktop, aplicații pentru dispozitive mobile, sisteme încorporate și în timp real și aplicații și servicii web. C++ este un limbaj de programare imperativ, procedural, multi-paradigma, compilat, cu scop general. Acceptă programarea structurată, programarea orientată pe obiecte și programarea generică. Are un sistem de tip dinamic și un management explicit al memoriei.

Ce este programarea orientată pe obiecte?

OOP este modalitatea de a crea cod reutilizabil, ușor de întreținut și care poate fi citit. Pe scurt, OOP este o paradigmă de programare care se bazează pe proiectarea software-ului în jurul obiectelor din lumea reală. De exemplu, în Java, dacă doriți să proiectați un software care se ocupă de cărți, creați o clasă numită Book și apoi creați instanțe (obiecte) separate ale acestei clase reprezentând o singură carte. Același lucru este valabil și pentru alte clase pe care trebuie să le creați în software.

Ce este legarea dinamică în C++?

Legarea dinamică asociază semnificația unui identificator dintr-un text de program cu definiția acelui identificator găsit în timpul execuției. Această asociere de sens se numește legare. Este principiul fundamental al programarii orientate pe obiecte. Identificatorii legați dinamic sunt ramurile și frunzele ierarhiei de clase orientate pe obiecte. Sunt dinamice pentru că sunt rezolvate în timpul execuției, nu în timpul compilării. Ramurile și frunzele ierarhiei claselor orientate pe obiecte sunt dinamice deoarece sunt legate de clasele derivate din ele.