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 dellAutomazione
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 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 dazione Le funzioni sovraccaricate sono definite nello stesso campo dazione Una funzione locale non sovraccarica, ma nasconde una funzione globale
Risoluzione del sovraccarico Quando viene chiamata una funzione sovraccaricata Le funzioni candidate sono linsieme delle funzioni sovraccaricate Stesso nome della funzione chiamata Le funzioni utilizzabili sono quelle che possono essere utilizzate con il numero e il tipo degli argomenti della chiamata Numero di parametri almeno pari al numero di argomenti Esistono delle conversioni per trasformare ogni argomento nel tipo del parametro corrispondente 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 allargomento con una conversione standard
Corrispondenza di argomenti Alcune conversioni banali sono considerate corrispondenze esatte Nome di array in puntatore Nome di funzione in puntatore a funzione T in const T Conversioni con promozione 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