Elementi di
programmazione
ad oggetti
a. a. 2009/2010
Corso di Laurea Magistrale in Ingegneria Elettronica
Docente: Mauro Mazzieri, Dipartimento di Ingegneria Informatica,
Gestionale e dell’Automazione
Lezione 3
Funzioni e sovraccaricamento
Overloading
Il sovraccaricamento (overloading)
consiste nel definire, nello stesso
campo di azione, funzioni con lo
stesso nome ma liste di parametri
differenti
Generalmente le funzioni svolgono una
operazione comuni e possono essere
applicate a parametri di diverso tipo
int max(int, int);
int max(const vector<int>&);
int max(const int[], int n);
Come sovraccaricare una
funzione
Dichiarazioni successive di una
funzione con stesso nome e valore di
ritorno, ma differenti parametri, sono
overloading
Se coincidono anche i parametri, la
seconda definizione ridefinisce la
prima
Se nome e parametri coincidono, ma
differisce il tipo di ritorno, viene presa
come un errore di dichiarazione
Sovraccaricamento e campo
d’azione
Le funzioni sovraccaricate sono
definite nello stesso campo d’azione
Una funzione locale non sovraccarica,
ma nasconde una funzione globale
Risoluzione del sovraccarico
Quando viene chiamata una funzione
sovraccaricata
Le funzioni candidate sono l’insieme delle
funzioni sovraccaricate
Stesso nome della funzione chiamata
Numero di parametri almeno pari al numero di
argomenti
Esistono delle conversioni per trasformare ogni
argomento nel tipo del parametro corrispondente
Le funzioni utilizzabili sono quelle che possono
essere utilizzate con il numero e il tipo degli
argomenti della chiamata
La miglior funzione utilizzabile è quella che
corrisponde meglio alla chiamata
Le conversioni necessarie sono le meno peggio
Argomenti di default
Una funzione può essere dichiarata con dei
valori di default per alcuni parametri
int moltiplica(int a, int b = 5)
{
return a * b;
}
cout << moltiplica(2, 3); // 6
cout << moltiplica(2); // 10
Argomenti di default e
overloading
void ff(int);
void ff(long, int = 0);
ff(2L); // ff(long, 0)
ff(0, 0); // ff(long, int)
ff(0); // ff(int)
ff(3.14); // errore di
compilazione: entrambe
possono corrispondere
all’argomento con una
conversione standard
Corrispondenza di argomenti
Alcune conversioni banali sono considerate
corrispondenze esatte
Conversioni con promozione
Nome di array in puntatore
Nome di funzione in puntatore a funzione
T in const T
Interi: da bool, char, short, unsigned a int
Virgola mobile: da float a double, da double a long
double
Conversioni standard
Da un tipo intero, virgola mobile o enum ad un tipo
intero o virgola mobile
Da un puntatore qualsiasi a void * (puntatore generico)
Da un tipo intero, virgole mobile o enum a bool