nikpez di nikpez
Ominide 738 punti

Funzioni - Tipi

Funzioni con la lista degli argomenti di lunghezza variabile
Esempi: scanf(), printf().
tipoR nomeF(t1 p1, t2 p2, …, tn pn, …);
Tre puntini di sospensione o ellisse
Si devono usare una variabile di tipo va_list per scandire la lista di lunghezza variabile e le macro di sistema: va_start(),
va_arg() e va_end().

Argomenti di una funzione con valori di default
Se esaminiamo un sistema operativo ci accorgiamo che per molti comandi è possibile non specificare il valore di alcuni parametri, poiché il sistema è predisposto per sopprimere a questa mancanza assegnando ai parametri stessi dei valori predefiniti, chiamati valori di default.
Es. MS-DOS: comando interno dir.
Il C++ consente di costruire funzioni con argomenti che possono essere inizializzati al momento della dichiarazione con valori di
default predefiniti.

tipoR nomeF(t1 p1, t2 p2, …, tn pn, tp+1 pn+1 = v1, … tn+m pn+m=vm);
L’elenco dei possibili argomenti con valori di default deve obbligatoriamente seguire quella dei parametri tradizionali.
E’ consigliabile, per motivi di leggibilità, porre sempre gli eventuali valori di default nella dichiarazione del prototipo. Essi non si possono infatti porre sia nel prototipo che nell’intestazione della funzione.
void visualizza(int a, int b=0, int c=0);
int main()
{
visualizza(1,2,3);
visualizza(1,2);
visualizza(1);
return 0;
}
void visualizza(int a, int b, int c)
{
cout<<a<<b<<c<<endl;
}

Funzioni sovrapposte
Nella stesura di un pgm, in generale, è buona norma assegnare a funzioni diverse nomi diversi, ma, quando alcune funzioni eseguono
sostanzialmente lo stesso compito anche operando con oggetti di tipo diverso, può risultare più chiaro utilizzare il medesimo nome
per tutte le funzioni.
In C, l’operatore / viene usato sia per interi che per numeri reali.
Sovrapposizione di nome (overloading).

E’ il compilatore che sceglie quale funzione richiamare in base al risultato del confronto tra i tipi degli argomenti attuali e quelli dei corrispondenti parametri formali.
Esempio:
char simmetrico (car car); //range: ‘A’..’Z’
unsigned short int simmetrico (unsigned short int num); //range: 0..65535

Funzioni modello (template)
In molte occasioni capita di dover ricorrere ad una serie di funzioni in cui varia solo il tipo degli argomenti, ma non le operazioni che devono essere compiute su di essi.

Il C++ ci consente di costruire un unico modello di funzione in grado di adattarsi a parametri di tipo diverso.
//Esempio: funzione modello scambia
template <class tipo>
void scambia (tipo & a, tipo &b);
int main()
{ int num1, num2;
double num3, num4;
scambia(num1, num2);

scambia(num3, num4);

}
template <class tipo>
void scambia (tipo & a, tipo &b)
{ tipo c;
c = a;
a = b;
b = c;
}

Registrati via email