Binding dinamico in C++: spiegazione, funzioni e implementazione

Pubblicato: 2021-02-04

Sommario

introduzione

Questo articolo ti guiderà attraverso il funzionamento dell'associazione dinamica in C++ . Ci si aspetta che tu abbia una conoscenza di base del funzionamento dell'ereditarietà e dell'associazione statica in C++. Questo perché alcune limitazioni dell'associazione statica vengono rimosse dall'associazione dinamica. Ti mostreremo, insieme a codici corretti e semplici, quanto sia utile il binding dinamico.

Cos'è l'associazione dinamica?

Per vincolare, generalmente intendiamo collegare un oggetto con un altro. In termini di linguaggi di programmazione, il binding non è molto diverso. È il collegamento di una definizione di funzione e di una chiamata di funzione. Ma perché 'dinamico'? In parole semplici, l'associazione dinamica sta semplicemente ritardando la scelta o la selezione di quale funzione eseguire fino al suo runtime. Usando l'associazione dinamica in C++ , scegliamo quale funzione possiamo eseguire in base al tipo sottostante dell'oggetto.

Questa flessibilità non è stata concessa ai programmatori con binding statico. L'associazione statica si verificava in fase di compilazione e non in fase di esecuzione. Inoltre, l'associazione statica ha creato il collegamento della chiamata e della definizione di funzione durante la fase di compilazione, mentre, come ora sai, l'associazione dinamica non lo fa fino al momento dell'esecuzione.

L'associazione dinamica ci consente di ignorare le differenze di tipo fornendoci la flessibilità nella scelta del tipo di funzione di cui abbiamo bisogno in quell'istante di runtime. Esaminando questa affermazione, possiamo capire che l'associazione dinamica ci consente di gestire oggetti diversi utilizzando un solo nome di funzione. Ciò riduce la complessità del codice e consente anche al programmatore di avere un tempo più facile durante il debug.

Funzioni virtuali

Abbiamo parlato molto dell'associazione dinamica in C++ . Ma come procedere? Per implementare l'associazione dinamica nel codice C++, è necessario utilizzare "funzioni virtuali". Quindi cosa sono le funzioni virtuali?

Questo articolo non approfondirà le funzioni virtuali in quanto sono abbastanza importanti per un articolo separato. Ma ti verranno fornite informazioni sufficienti sulle funzioni virtuali per comprendere chiaramente l'associazione dinamica.

Le funzioni virtuali sono funzioni membro speciali a cui le chiamate effettuate tramite un puntatore (o riferimento) vengono risolte in fase di esecuzione, in base al tipo dell'oggetto con il puntatore. In parole semplici, se si definisce una funzione virtuale in una classe base, è possibile sovrascrivere la funzione nelle classi derivate.

Questo è il potere delle funzioni virtuali. In C++ si definisce una funzione virtuale usando la parola chiave 'virtual' all'inizio della definizione della funzione. Potrebbe non essere necessario ripetere la parola chiave virtual per ogni classe derivata di una classe base perché una volta che una funzione è dichiarata "virtuale", rimarrà "virtuale" in tutte le classi derivate.

Implementazione C++

Si tratta di funzioni virtuali. Ora esaminiamo un programma per comprendere l'associazione dinamica in C++ :

Programma n. 1 :

Vediamo due classi:- La classe A è la classe 'base', mentre la Classe B è la 'classe derivata'. All'interno di entrambe le classi, c'è una funzione con lo stesso nome 'display'. Nella classe genitore, c'è un'altra funzione chiamata final_print() che chiama la funzione display(). Nella funzione main() creiamo due oggetti diversi per due classi diverse, chiamando la stessa funzione display().

Vediamo l'output del programma di cui sopra.

Output per il programma n. 1:

Come previsto, l'output esegue la funzione display() della classe base due volte come definita in fase di compilazione (associazione statica). Ma questo non è l'output che volevamo.

Ora per convertire il codice sopra in un binding dinamico, dobbiamo usare le funzioni virtuali. Vediamo come farlo.

Programma n. 2:

Aggiungiamo semplicemente la parola chiave 'virtuale' per entrambe le nostre funzioni display() in Classe A e Classe B, rendendole così funzioni virtuali. Questo è l'unico cambiamento necessario. Proprio come prima, chiamiamo la stessa funzione final_print() usando due oggetti diversi. Vediamo quale output otteniamo ora.

Output per il programma n. 2 :

Questo è l'output che volevamo e lo abbiamo ottenuto utilizzando l'associazione dinamica delle funzioni.

Impara i corsi di software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.

Conclusione

In questo articolo, abbiamo esaminato il concetto di binding dinamico in C++ . Per riassumere, l'associazione dinamica ci consente flessibilità chiamando una singola funzione per gestire oggetti diversi. Come evidente dal nostro codice, abbiamo chiamato la stessa funzione display() creando due oggetti diversi per darci due output diversi. Ciò è possibile perché l'associazione dinamica avviene in fase di esecuzione, a differenza dell'associazione statica che avviene in fase di compilazione.

Se sei interessato a saperne di più sullo sviluppo full-stack, dai un'occhiata al programma Executive PG di upGrad & IIIT-B in Full-stack Software Development, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, oltre 9 progetti e incarichi , status di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.

Che cos'è il linguaggio di programmazione C++?

C++ è un linguaggio di programmazione generico. È uno dei linguaggi di programmazione più utilizzati al mondo. C++ è una versione avanzata del linguaggio C e fornisce funzionalità che facilitano la programmazione orientata agli oggetti. C++ è un linguaggio di programmazione generico mentre C è un linguaggio di programmazione speciale. C++ è stato creato come estensione di C per supportare la programmazione orientata agli oggetti e viene utilizzato per sviluppare applicazioni desktop, applicazioni per dispositivi mobili, sistemi embedded e real-time e applicazioni e servizi web. C++ è un linguaggio di programmazione imperativo, procedurale, multiparadigma, compilato e generico. Supporta la programmazione strutturata, la programmazione orientata agli oggetti e la programmazione generica. Ha un sistema di tipo dinamico e una gestione esplicita della memoria.

Che cos'è la programmazione orientata agli oggetti?

OOP è il modo per creare codice riutilizzabile, di facile manutenzione e leggibile. In breve, OOP è un paradigma di programmazione basato sulla progettazione del software attorno agli oggetti del mondo reale. Ad esempio, in Java, se vuoi progettare un software che si occupi di libri, crei una classe chiamata Book e poi crei istanze separate (oggetti) di questa classe che rappresentano un singolo libro. Lo stesso vale per le altre classi che devi creare nel software.

Che cos'è l'associazione dinamica in C++?

L'associazione dinamica associa il significato di un identificatore in un testo di programma con la definizione di quell'identificatore trovata in fase di esecuzione. Questa associazione di significati è chiamata vincolante. È il principio fondamentale della programmazione orientata agli oggetti. Gli identificatori legati dinamicamente sono i rami e le foglie della gerarchia di classi orientata agli oggetti. Sono dinamici perché vengono risolti in fase di esecuzione, non in fase di compilazione. I rami e le foglie della gerarchia di classi orientata agli oggetti sono dinamici perché sono legati alle classi da essi derivate.