L'overloading delle funzioni in C++ e l'alternativa in C
In questa lezione userai l'overloading delle funzioni (function overloading) in C++ perché uno stesso nome funzioni con più tipi e lo confronterai con l'approccio del C.
Introduzione
L'overloading delle funzioni (function overloading) permette di avere più funzioni con lo stesso nome ma con tipi di parametri diversi. Quando chiami la funzione, il compilatore C++ sceglie la versione giusta in base al tipo degli argomenti. Il C non ha questa funzionalità, quindi ogni funzione deve avere un nome proprio.
Punti importanti
- Capisci come si fa in C prima di imparare le astrazioni del C++.
- Usa RAII e la semantica di valore (value semantics) per esprimere il possesso delle risorse.
- Preferisci gli strumenti del C++ con sicurezza dei tipi a macro e conversioni di tipo.
Esempi di codice C e C++
#include <stdio.h>
int max_int(int left, int right) {
return left > right ? left : right;
}
double max_double(double left, double right) {
return left > right ? left : right;
}
int main(void) {
printf("%d %.1f\n", max_int(3, 8), max_double(4.5, 2.0));
}
8 4.5
#include <iostream>
int maximum(int left, int right) {
return left > right ? left : right;
}
double maximum(double left, double right) {
return left > right ? left : right;
}
int main() {
std::cout << maximum(3, 8) << ' '
<< maximum(4.5, 2.0) << '\n';
}
8 4.5
Confronto tra C e C++
In C, le due funzioni max_int e max_double devono indicare il tipo nel nome. In C++ si chiamano entrambe maximum, e il compilatore sceglie la versione giusta a seconda che l'argomento sia int o double. La scelta avviene in fase di compilazione, quindi non rallenta il programma.
C usa convenzioni sui nomi, callback, macro e struct con il contesto.
C++ offre astrazioni con un ambito chiaro, sicure rispetto ai tipi e che di solito non costano nulla in più in esecuzione.
Esercizi di approfondimento
Esegui entrambe le versioni e poi modifica il codice per osservare la differenza di sicurezza che offre ciascun linguaggio.
- Scrivi prima il meccanismo in C e solo dopo usa la funzionalità equivalente del C++.
- Sostituisci la liberazione manuale delle risorse con RAII.
- Controlla se la funzionalità causa allocazioni di memoria o chiamate a funzioni virtuali.
Esercitati con una sfida
Usa ciò che questa lezione spiega per risolvere un problema reale. Ogni sfida gira nel browser, con test immediati e una revisione dell'IA.
Tutte le sfide