nikpez
Ominide
3 min. di lettura
Vota 5 / 5

Concetti Chiave

  • Le funzioni con lista di argomenti di lunghezza variabile utilizzano va_list e macro di sistema come va_start(), va_arg() e va_end() per gestire parametri multipli.
  • In C++, le funzioni possono avere argomenti con valori di default che vengono assegnati se non specificati, migliorando la leggibilità e la flessibilità del codice.
  • La sovrapposizione di funzioni (overloading) permette di utilizzare lo stesso nome per funzioni con compiti simili ma tipi di argomenti diversi, selezionate dal compilatore in base ai tipi dati.
  • I template in C++ consentono di definire funzioni generiche che si adattano a diversi tipi di parametri, riducendo la ripetizione di codice per operazioni simili.
  • Esempi pratici includono l'uso di template per creare funzioni come 'scambia', che scambiano i valori di due variabili indipendentemente dal loro tipo.
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 }

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
void scambia (tipo & a, tipo &b);
int main()
{ int num1, num2;
double num3, num4;
scambia(num1, num2);

scambia(num3, num4);

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

Domande da interrogazione

  1. Qual è la funzione delle ellissi nelle funzioni con lista di argomenti di lunghezza variabile?
  2. Le ellissi permettono di definire funzioni che accettano un numero variabile di argomenti, utilizzando variabili di tipo va_list e macro di sistema come va_start(), va_arg() e va_end().

  3. Come si gestiscono gli argomenti con valori di default in C++?
  4. In C++, gli argomenti con valori di default vengono inizializzati al momento della dichiarazione e devono seguire i parametri tradizionali. È consigliabile dichiararli nel prototipo per motivi di leggibilità.

  5. Cosa si intende per sovrapposizione di nome (overloading) nelle funzioni?
  6. La sovrapposizione di nome permette di utilizzare lo stesso nome per funzioni diverse che eseguono compiti simili ma operano su tipi di dati diversi. Il compilatore sceglie quale funzione richiamare in base ai tipi degli argomenti.

  7. Qual è il vantaggio delle funzioni modello (template) in C++?
  8. Le funzioni modello consentono di creare un'unica funzione che si adatta a parametri di tipo diverso, semplificando il codice quando le operazioni da eseguire sugli argomenti sono le stesse.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community