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
Scarica

Elementi di programmazione ad oggetti a. a. 2009/2001