Junior
Cosa sono il sovraccarico e la ridefinizione dei metodi in C++?
sobes.tech AI
Risposta dell'AI
Sovraccarico di metodi (Method Overloading):
- Permette di avere più metodi con lo stesso nome in una classe.
- Si differenziano per firma (numero e/o tipi di parametri).
- Il tipo di ritorno non partecipa alla definizione della firma per l'overloading.
- La scelta di un metodo specifico è determinata dal compilatore in base ai tipi di argomenti durante la chiamata (binding statico).
class MyClass {
public:
void print(int a) {
// Stampa di un numero intero
}
void print(double d) {
// Stampa di un numero a virgola mobile
}
void print(int a, int b) {
// Stampa di due numeri interi
}
};
Sovrascrittura di metodi (Method Overriding):
- Permette alla classe derivata di fornire un'implementazione specifica di un metodo già definito nella classe base.
- Il metodo nella classe derivata deve avere la stessa firma (nome, numero e tipi di parametri) e lo stesso tipo di ritorno (o un tipo di ritorno covariante).
- Si usa con funzioni virtuali (
virtual) per implementare il polimorfismo. - La scelta dell'implementazione concreta del metodo è determinata in fase di esecuzione (binding dinamico), a seconda del tipo reale dell'oggetto.
class Base {
public:
virtual void display() {
// Implementazione nella classe base
}
};
class Derived : public Base {
public:
void display() override { // La parola chiave override (a partire da C++11) aiuta a evitare errori
// Implementazione specifica nella classe derivata
}
};
Differenze principali:
| Caratteristica | Sovraccarico di metodi | Sovrascrittura di metodi |
|---|---|---|
| Luogo di applicazione | In una stessa classe | In classi base e derivate |
| Nome del metodo | Stesso | Stesso |
| Firma del metodo | Diversa | Uguale |
| Meccanismo di scelta | Binding statico (compilazione) | Binding dinamico (esecuzione) |
| Usato con | Funzioni normali | Funzioni virtuali |
| Obiettivo | Azioni diverse per tipi diversi | Implementazione specifica nell'eredità |