Junior
Qu'est-ce que la surcharge et la redéfinition de méthodes en C++?
sobes.tech IA
Réponse de l'IA
Surcharge de méthodes (Method Overloading):
- Permet d'avoir plusieurs méthodes avec le même nom dans une classe.
- Se différencient par la signature (nombre et/ou types de paramètres).
- Le type de retour n'intervient pas dans la définition de la signature pour la surcharge.
- La sélection d'une méthode spécifique est déterminée par le compilateur en fonction des types d'arguments lors de l'appel (liaison statique).
class MyClass {
public:
void print(int a) {
// Imprimer un entier
}
void print(double d) {
// Imprimer un nombre à virgule flottante
}
void print(int a, int b) {
// Imprimer deux entiers
}
};
Redéfinition de méthodes (Method Overriding):
- Permet à une classe dérivée de fournir une implémentation spécifique d'une méthode déjà définie dans la classe de base.
- La méthode dans la classe dérivée doit avoir la même signature (nom, nombre et types de paramètres) et le même type de retour (ou un type de retour covariant).
- Utilisée avec des fonctions virtuelles (
virtual) pour réaliser le polymorphisme. - La sélection de l'implémentation concrète de la méthode est déterminée au moment de l'exécution (liaison dynamique), en fonction du type réel de l'objet.
class Base {
public:
virtual void display() {
// Implémentation dans la classe de base
}
};
class Derived : public Base {
public:
void display() override { // Le mot-clé override (à partir de C++11) aide à éviter les erreurs
// Implémentation spécifique dans la classe dérivée
}
};
Différences principales:
| Caractéristique | Surcharge de Méthodes | Redéfinition de Méthodes |
|---|---|---|
| Lieu d'application | Dans une même classe | Dans les classes de base et dérivées |
| Nom de la méthode | Identique | Identique |
| Signature de la méthode | Différente | Identique |
| Mécanisme de sélection | Liaison statique (compile-time) | Liaison dynamique (exécution) |
| Utilisé avec | Fonctions normales | Fonctions virtuelles |
| Objectif | Actions différentes pour différents types | Implémentation spécifique dans l'héritage |