giovedì 13 settembre 2012

Sovraccarico delle Funzioni

Nel C++ è possibile definire funzioni con nomi identici ma che effettuano diverse azioni. Le funzioni devono differire nella lista dei parametri (e/o i loro attributi const). Un esempio vien elencato sotto:
#include <stdio.h>
void mostra(int valore)
{
printf("Intero: %d\n", valore);
}

void mostra(double valore)
{
printf("Virgola mobile: %lf\n", valore);
}

void mostra(char const *valore)
{
printf("Stringa: %s\n", valore);
}

int main()
{
mostra(18);
mostra(3.1415);
mostra("Ciao Mondo!\n");
system ("PAUSE");
return 0;
}

Nel programma soprascritto la funzione mostra viene definita, e modificando solo la lista parametri, si aspetta un int, double o char *, rispettivamente. Le funzioni hanno nome identico ma che differiscono per la lista parametri sono chiamate overloaded “sovraccariche”. L'atto di definire queste funzioni è chiamato 'function overloading', 'sovraccarico di funzione'.
Il compilatore C++ implementa il sovraccarico della funzione mostra in modo abbastanza semplice. Tutte le funzioni condividono lo stesso nome (in questo esempio mostra), il compilatore ( e di conseguenza il linker) usa nomi diversi. La conversione del nome nel file sorgente è chiamato 'compressione del nome'. Il compilatore C++ può convertire il prototipo void mostra(int) nel nome interno VmostraI, mentre un'analoga funzione char*, può essere chiamata VmostraCP. I nomi veri sono usati internamente dipendono dal compilatore e non sono rilevanti per il programmatore, eccetto quando vengono mostrati (es. la lista del contenuto di una libreria).
Alcuni punti da rispettare nel caso del sovraccarico di funzione:
  • Non usare l'overloading per funzioni che svolgono compiti concettualmente diversi. Nel caso della funzione mostra essi sono correlati tra loro (stampa informazione a schermo).
  • C++ non permette di creare funzioni che differiscono solo per il valore restituito, il quale può essere ignorato dal programmatore. Ad esempio l'istruzione printf(“Ciao...”); non attribuisce alcun particolare valore di ritorno della funzione.
  • E' possibile sovraccaricare una funzione che differisca solo per il valore di const, in questo caso le classi possono avere funzioni con identica lista parametri ma differiscono per il valore di const attribuito. In questo caso solo una delle funzioni può avere un valore const.

Nessun commento:

Posta un commento