Sovrascrittura delle funzioni in C++ [sovraccarico delle funzioni vs sovrascrittura con esempi]

Pubblicato: 2021-05-25

L'override delle funzioni in C++ è una funzionalità che ci consente di utilizzare una funzione nella classe figlia che è già presente nella sua classe padre. La classe figlia eredita tutti i membri dati e le funzioni membro presenti nella classe padre. Se desideri sovrascrivere qualsiasi funzionalità nella classe figlio, puoi implementare l'override della funzione. Sovrascrivere la funzione significa creare una versione più recente della funzione della classe padre nella classe figlia.

Sommario

Funzioni C++

Una funzione C++ è un gruppo di istruzioni che si uniscono per eseguire un'attività. Ogni programma ha almeno una funzione main() e alcuni programmi possono avere funzioni aggiuntive.

La dichiarazione della funzione trasmette al compilatore il nome della funzione, i parametri e il tipo restituito. Una definizione di funzione determina il corpo della funzione. La libreria standard C++ è composta da molte funzioni integrate che il programma può chiamare. Una funzione può essere un metodo, una procedura o una subroutine.

Definizione di una funzione

La sintassi generale di una funzione C++ è:

tipo_ritorno nome_funzione(elenco parametri) {

corpo funzionale

}

Qualsiasi funzione C++ comprende un'intestazione di funzione e un corpo. I componenti di una funzione C++ sono:

Tipo restituito: il tipo restituito rappresenta il tipo del valore restituito della funzione.

Nome funzione : indica il nome della funzione. Il nome della funzione insieme all'elenco dei parametri costituiscono la firma della funzione.

Parametri: un parametro è un segnaposto per il valore restituito dalla funzione. Quando viene chiamata una funzione, al parametro viene passato un valore chiamato parametro effettivo.

Corpo della funzione: il corpo della funzione costituisce l'elenco di istruzioni che definiscono cosa farà la funzione.

Chiamare una funzione

Per utilizzare una funzione in C++, è necessario richiamare o chiamare la funzione. Il controllo viene trasferito alla funzione, la funzione esegue quindi l'attività desiderata e l'istruzione return restituisce il controllo al programma principale.

È necessario passare i parametri richiesti, incluso il nome della funzione, per chiamare una funzione. Se la funzione restituisce un valore, il valore può essere memorizzato. Ci sono alcuni modi in cui gli argomenti possono essere passati a una funzione mentre la si chiama. I tipi di chiamata sono Chiamata per valore, Chiamata per riferimento e Chiamata per puntatore.

Sovrascrittura delle funzioni in C++

Quando una classe derivata o una classe figlia definisce una funzione che è già definita nella classe base o nella classe padre, in C++ viene chiamata funzione di override. L'override delle funzioni ci aiuta a raggiungere il polimorfismo di runtime. Consente ai programmatori di eseguire l'implementazione specifica di una funzione già utilizzata nella classe base.

Esempio:

Fonte

Studia l'esempio di cui sopra. Qui la classe genitore è "Base" e la classe figlia è "Derivato".

L'output del programma di cui sopra sarà:

Funzione derivata

La funzione print() è dichiarata in entrambe le classi Base e Derived. Quando chiamiamo la funzione print() tramite l'oggetto della classe Derived, “derived1”, la print() della classe Derived viene invocata ed eseguita sovrascrivendo la stessa funzione della classe Base.

Funzionamento del principio di sovrascrittura delle funzioni

Fonte

Come puoi vedere dall'immagine sopra, la funzione della classe Base è stata sovrascritta perché abbiamo chiamato la stessa funzione tramite l'oggetto della classe Derived.

Se chiamiamo la funzione print() tramite un oggetto della classe Base, la funzione non verrà sovrascritta. Ad esempio:

//Funzione di chiamata della classe Base

Base base1;

base1.stampa(); // Output: funzione di base

L'output del codice sopra sarà:

Funzione di base

Come accedere alle funzioni sovrascritte in C++

È necessario utilizzare l'operatore di risoluzione dell'ambito, “::” per accedere alla funzione sovrascritta. Un altro modo per accedere alla funzione sottoposta a override consiste nell'usare il puntatore della classe base per puntare a un oggetto della classe derivata e chiamare la funzione tramite il puntatore.

Esempio:

Fonte

L'output del programma di cui sopra sarà:

Funzione derivata

Funzione di base

Funzionamento della funzione Accesso di override

Fonte

Qui l'istruzione derivata 1.print() accede alla funzione print() della classe Derived e l'istruzione derivata2.Base::print() accede alla funzione print() della classe Base.

Chiamata di una funzione C++ sottoposta a override dalla classe derivata

In questo codice, chiamiamo la funzione sottoposta a override dall'interno della stessa classe Derived.

Utilizzo della chiamata di funzione sottoposta a override dalla classe Derived

Fonte

Il comando Base::print() chiama la funzione sovrascritta dall'interno della classe Derived.

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

Sovraccarico delle funzioni e sovrascrittura delle funzioni

L'overloading delle funzioni si ottiene in fase di compilazione e può essere eseguito nella classe base e nella classe derivata. Aiuta a fornire più definizioni delle funzioni modificando la firma delle funzioni come il tipo di dati dei parametri o i tipi restituiti.

L'override della funzione viene ottenuto in fase di esecuzione. Durante l'override, la classe base viene ridefinita nella classe derivata con lo stesso tipo restituito e parametri. Altre differenze tra l'override delle funzioni e l'override delle funzioni in C++ sono:

1. Eredità

L'override delle funzioni può essere utilizzato solo con l'ereditarietà delle classi, mentre l'override delle funzioni non richiede l'ereditarietà delle classi.

2. Funzione Firma

Le funzioni sovraccaricate differiscono nella firma sia per il numero di parametri che per il tipo di parametri. Nell'override della funzione, le firme della funzione rimangono le stesse.

3. Ambito della funzione

Le funzioni sovrascritte variano nell'ambito mentre le funzioni sovraccaricate hanno lo stesso ambito.

4. Comportamento della funzione

L'override della funzione è essenziale quando una funzione di classe derivata deve funzionare in modo diverso o con funzionalità aggiuntive rispetto alla funzione di classe base. L'overloading delle funzioni viene implementato quando le funzioni con lo stesso nome devono avere comportamenti diversi a seconda dei parametri loro passati.

Se sei interessato a saperne di più sullo sviluppo di software 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'è la funzione di override?

L'override di funzione è un concetto nella programmazione orientata agli oggetti che consente a una funzione all'interno di una classe derivata di sovrascrivere una funzione nella sua classe base, ma con una firma diversa (e solitamente con un'implementazione diversa). Un aspetto chiave di questo è che non è possibile per la classe derivata "annullare" le modifiche alla classe base, o almeno non è possibile senza modificare ulteriormente la classe base. Un uso comune dell'override delle funzioni consiste nel fornire un'implementazione predefinita nella classe base e quindi eseguire l'override con un'implementazione specifica nella classe derivata.

Quali sono le differenze tra l'override della funzione e il sovraccarico?

L'override della funzione si verifica quando si crea una funzione con lo stesso nome di una funzione che esiste già in una classe base. Quando ciò accade, la nuova funzione sostituirà la funzione esistente e può essere utilizzata al posto della funzione originale. Il sovraccarico si verifica quando si creano funzioni con lo stesso nome ma parametri diversi. Quando ciò accade, la nuova funzione verrà chiamata in aggiunta alla funzione originale ed entrambe le funzioni possono essere utilizzate in qualsiasi contesto senza alcun problema.

Che cos'è l'ereditarietà in C++?