Remplacement de fonction en C++ [Surcharge de fonction vs remplacement avec des exemples]

Publié: 2021-05-25

Le remplacement de fonction en C++ est une fonctionnalité qui nous permet d'utiliser une fonction dans la classe enfant qui est déjà présente dans sa classe parent. La classe enfant hérite de toutes les données membres et des fonctions membres présentes dans la classe parent. Si vous souhaitez remplacer une fonctionnalité de la classe enfant, vous pouvez implémenter la substitution de fonction. Le remplacement de fonction signifie la création d'une version plus récente de la fonction de classe parent dans la classe enfant.

Table des matières

Fonctions C++

Une fonction C++ est un groupe d'instructions qui s'assemblent pour effectuer une tâche. Chaque programme a au moins une fonction main() et certains programmes peuvent avoir des fonctions supplémentaires.

La déclaration de la fonction transmet au compilateur le nom de la fonction, les paramètres et le type de retour. Une définition de fonction détermine le corps de la fonction. La bibliothèque standard C++ se compose de nombreuses fonctions intégrées que le programme peut appeler. Une fonction peut être une méthode, une procédure ou un sous-programme.

Définir une fonction

La syntaxe générale d'une fonction C++ est :

type_retour nom_fonction(liste de paramètres) {

corps de fonction

}

Toute fonction C++ comprend un en-tête de fonction et un corps. Les composants d'une fonction C++ sont :

Type de retour – Le type de retour représente le type de la valeur de retour de la fonction.

Nom de la fonction - Indique le nom de la fonction. Le nom de la fonction ainsi que la liste des paramètres constituent la signature de la fonction.

Paramètres – Un paramètre est un espace réservé pour la valeur renvoyée par la fonction. Lorsqu'une fonction est appelée, une valeur est transmise au paramètre qui est appelé le paramètre réel.

Corps de la fonction - Le corps de la fonction constitue la liste des instructions qui définissent ce que la fonction va faire.

Appel d'une fonction

Pour utiliser une fonction en C++, vous devez invoquer ou appeler la fonction. Le contrôle est transféré à la fonction, la fonction exécute alors la tâche souhaitée et l'instruction return renvoie le contrôle au programme principal.

Vous devez transmettre les paramètres requis, y compris le nom de la fonction, pour appeler une fonction. Si la fonction renvoie une valeur, la valeur peut être stockée. Il existe plusieurs façons de passer des arguments à une fonction lors de son appel. Les types d'appel sont Appel par valeur, Appel par référence et Appel par pointeur.

Remplacement de fonction en C++

Lorsqu'une classe dérivée ou une classe enfant définit une fonction qui est déjà définie dans la classe de base ou la classe parente, elle est appelée substitution de fonction en C++. Le remplacement de fonction nous aide à atteindre le polymorphisme d'exécution. Il permet aux programmeurs d'effectuer l'implémentation spécifique d'une fonction déjà utilisée dans la classe de base.

Exemple:

La source

Étudiez l'exemple donné ci-dessus. Ici, la classe parent est "Base" et la classe enfant est "Derived".

La sortie du programme ci-dessus sera :

Fonction dérivée

La fonction print() est déclarée dans les classes Base et Derived. Lorsque nous appelons la fonction print() via l'objet de classe Derived, "derived1", le print() de la classe Derived est invoqué et exécuté en remplaçant la même fonction de la classe Base.

Fonctionnement du principe de priorité des fonctions

La source

Comme vous pouvez le voir sur l'image ci-dessus, la fonction de la classe Base a été remplacée car nous avons appelé la même fonction via l'objet de la classe Derived.

Si nous appelons la fonction print() via un objet de la classe Base, la fonction ne sera pas surchargée. Par exemple :

//Appelle la fonction de la classe Base

Socle socle1 ;

base1.print(); // Sortie : Fonction de base

La sortie du code ci-dessus sera :

Fonction de base

Comment accéder aux fonctions remplacées en C++

Vous devez utiliser l'opérateur de résolution de portée « :: » pour accéder à la fonction remplacée. Une autre façon d'accéder à la fonction redéfinie consiste à utiliser le pointeur de la classe de base pour pointer vers un objet de la classe dérivée et à appeler la fonction via le pointeur.

Exemple:

La source

La sortie du programme ci-dessus sera :

Fonction dérivée

Fonction de base

Fonctionnement de la fonction Accès aux dérogations

La source

Ici, l'instruction dérivée 1.print() accède à la fonction print() de la classe Derived et l'instruction dérivée2.Base::print() accède à la fonction print() de la classe Base.

Appel d'une fonction C++ surchargée à partir de la classe dérivée

Dans ce code, nous appelons la fonction redéfinie depuis la classe Derived elle-même.

Fonctionnement de l'appel de fonction surchargée de la classe Derived

La source

La commande Base::print() appelle la fonction remplacée depuis l'intérieur de la classe Derived.

Apprenez des cours de génie logiciel en ligne dans les meilleures universités du monde. Gagnez des programmes Executive PG, des programmes de certificat avancés ou des programmes de maîtrise pour accélérer votre carrière.

Surcharge de fonction vs remplacement de fonction

La surcharge de fonctions est réalisée au moment de la compilation et peut être effectuée dans la classe de base et la classe dérivée. Il est utile de fournir plusieurs définitions des fonctions en modifiant la signature des fonctions telles que le type de données des paramètres ou les types de retour.

Le remplacement de la fonction est réalisé au moment de l'exécution. Lors du remplacement, la classe de base est redéfinie dans la classe dérivée avec le même type de retour et les mêmes paramètres. Les autres différences entre le remplacement de fonction et la surcharge de fonction en C++ sont :

1. Héritage

Le remplacement de fonction ne peut être utilisé qu'avec l'héritage de classe, tandis que la surcharge de fonction ne nécessite pas d'héritage de classe.

2. Signature de fonction

Les fonctions surchargées diffèrent dans leur signature soit par le nombre de paramètres, soit par le type de paramètres. En cas de remplacement de fonction, les signatures de fonction restent les mêmes.

3. Portée de la fonction

Les fonctions surchargées ont une portée variable tandis que les fonctions surchargées ont la même portée.

4. Comportement de la fonction

Le remplacement de fonction est essentiel lorsqu'une fonction de classe dérivée doit fonctionner différemment ou avec des fonctionnalités supplémentaires par rapport à la fonction de classe de base. La surcharge de fonctions est implémentée lorsque des fonctions portant le même nom doivent avoir des comportements différents en fonction des paramètres qui leur sont transmis.

Si vous souhaitez en savoir plus sur le développement de logiciels à pile complète, consultez le programme Executive PG de upGrad & IIIT-B en développement de logiciels à pile complète, conçu pour les professionnels en activité et offrant plus de 500 heures de formation rigoureuse, plus de 9 projets, et affectations, statut d'ancien de l'IIIT-B, projets de synthèse pratiques et aide à l'emploi avec les meilleures entreprises.

Qu'est-ce que la fonction prioritaire ?

Le remplacement de fonction est un concept de programmation orientée objet qui permet à une fonction dans une classe dérivée de remplacer une fonction dans sa classe de base, mais avec une signature différente (et généralement avec une implémentation différente). Un aspect clé de ceci est qu'il n'est pas possible pour la classe dérivée "d'annuler" les modifications apportées à la classe de base, ou du moins ce n'est pas possible sans modifier davantage la classe de base. Une utilisation courante du remplacement de fonction consiste à fournir une implémentation par défaut dans la classe de base, puis à remplacer par une implémentation spécifique dans la classe dérivée.

Quelles sont les différences entre le remplacement de fonction et la surcharge ?

Le remplacement de fonction se produit lorsque vous créez une fonction portant le même nom qu'une fonction qui existe déjà dans une classe de base. Lorsque cela se produit, la nouvelle fonction remplace la fonction existante et peut être utilisée à la place de la fonction d'origine. Une surcharge se produit lorsque vous créez des fonctions avec le même nom mais des paramètres différents. Lorsque cela se produit, la nouvelle fonction sera appelée en plus de la fonction d'origine, et les deux fonctions peuvent être utilisées dans n'importe quel contexte sans aucun problème.

Qu'est-ce que l'héritage en C++ ?