Sobes.tech
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