Différence entre la fonction virtuelle et pure virtuelle

Auteur: Laura McKinney
Date De Création: 2 Avril 2021
Date De Mise À Jour: 13 Peut 2024
Anonim
Différence entre la fonction virtuelle et pure virtuelle - La Technologie
Différence entre la fonction virtuelle et pure virtuelle - La Technologie

Contenu


La fonction virtuelle et la fonction virtuelle pure sont les concepts du polymorphisme à l'exécution. La principale différence entrefonction virtuelle ' et «Fonction virtuelle pure» est-ce que la «fonction virtuelle» a sa définition dans la classe de base et que les classes dérivées héritées la redéfinissent. La fonction virtuelle pure n'a pas de définition dans la classe de base et toutes les classes dérivées héritantes doivent la redéfinir.

Cependant, la fonction virtuelle est également appelée répartition dynamique et répartition au moment de l'exécution, car la fonction appelée est spécifiée dans le délai d'exécution en fonction du type de l'objet utilisé.

Le polymorphisme est supporté à la fois par les langages C ++ et Java. En Java, le terme "écrasant" est utilisé à la place de "fonction virtuelle", car la fonction virtuelle est le terme de C ++.


  1. Tableau de comparaison
  2. Définition
  3. Différences Clés
  4. Conclusion

Tableau de comparaison

Base de comparaisonFonction virtuelleFonction virtuelle pure
De baseLa fonction virtuelle a sa définition dans la classe de base.La fonction virtuelle pure n'a pas de définition dans la classe de base.
Déclarationfunct_name virtuel (liste de paramètres) {. . . . .};funct_name virtuel (liste de paramètres) = 0;
Classe dérivéeToutes les classes dérivées peuvent ou non remplacer la fonction virtuelle de la classe de base.Toutes les classes dérivées doivent remplacer la fonction virtuelle de la classe de base.
Effet

Les fonctions virtuelles sont de nature hiérarchique; cela n'affecte pas la compilation si des classes dérivées ne remplacent pas la fonction virtuelle de la classe de base.Si toutes les classes dérivées ne parviennent pas à remplacer la fonction virtuelle de la classe de base, l'erreur de compilation se produira.
Classe abstraitePas de concept.Si une classe contient au moins une fonction virtuelle pure, elle est déclarée abstraite.


Définition de la fonction virtuelle

le fonction virtuelle est la fonction membre de la classe de base et elle est redéfinie par les classes dérivées qui héritent de la classe de base. Il n'est pas nécessaire que toutes les classes dérivées héritantes redéfinissent la fonction virtuelle, elle n'est redéfinie que par les classes dérivées pouvant nécessiter son fonctionnement. Une fonction virtuelle est créée en déclarant la fonction dans la classe de base précédée du mot clé 'virtuel'.

Déclaration:

classe de base {public: type virtuel nom_fonction (liste de paramètres) {. . . }};

Les classes dérivées héritées peuvent redéfinir la fonction virtuelle sans mot-clé "virtuel". Les classes dérivées redéfinissent la fonction virtuelle pour accomplir sa tâche. Comme la fonction virtuelle est redéfinie dans des classes dérivées, nous avons plusieurs formes de la même fonction. Désormais, la version de la fonction appelée dépend du type d'objet auquel on fait référence qui appelle cette fonction.

Héritage à plusieurs niveaux

Dans l'héritage à plusieurs niveaux, où une classe dérivée qui a hérité la fonction virtuelle de sa classe de base, lorsqu'elle est utilisée comme classe de base pour une autre classe dérivée, la fonction virtuelle peut toujours être remplacée. Ainsi, lorsqu'une fonction virtuelle est héritée, sa nature virtuelle est également héritée.

Les fonctions virtuelles sont également de nature hiérarchique, c’est-à-dire si une classe dérivée ne redéfinit pas / ne redéfinit pas la fonction virtuelle héritée de la classe de base et lorsque l’objet de la classe dérivée appelle cette fonction virtuelle, la fonction virtuelle définie par la classe de base est invoquée.

Définition de la fonction virtuelle pure

Comme indiqué ci-dessus, si la classe dérivée ne remplace pas la fonction virtuelle, la fonction virtuelle définie par la classe de base est utilisée. Mais que se passe-t-il si la classe de base elle-même ne définit pas la fonction virtuelle? Plusieurs fois, la classe de base n'a pas de définition pour la fonction virtuelle ou vous souhaitez parfois que toutes les classes dérivées remplacent la fonction virtuelle.

Pour gérer ces deux situations ci-dessus, C ++ prend en charge le concept deFonction virtuelle pure“. Une ‘fonction virtuelle pure’ est déclarée dans la classe de base mais n’a pas sa définition dans la classe de base. La fonction virtuelle pure est déclarée comme suit.

type virtuel funct_name (liste_paramètres) = 0;

Chaque fois qu'une fonction virtuelle de la classe de base devient «pure», chaque classe dérivée doit obligatoirement remplacer la fonction virtuelle pure de la classe de base. Si la classe dérivée ne parvient pas à remplacer la fonction virtuelle pure de la classe de base, cela entraînera une erreur de compilation.

Classe abstraite

La classe contenant au moins une fonction pure est appelée "classe abstraite". Aucun objet de classe abstraite ne peut être créé, mais vous pouvez créer des références et des pointeurs vers des classes abstraites. Les membres des classes abstraites sont accessibles via l'objet des classes dérivées qui hérite de la classe de base abstraite.

Une classe que vous voulez déclarer abstraite, utilisez le mot clé 'abstrait' en face de la 'classe' mot-clé.

// par exemple, classe abstraite nom-classe {. . type virtuel funct_name (liste_paramètres) = 0; . . };

  1. Les fonctions virtuelles sont définitivement définies dans la classe de base et redéfinies (substitution) dans la classe dérivée. D'autre part, la fonction virtuelle pure de la classe de base n'est en particulier pas définie dans la classe de base
  2. Classe dérivée si nécessaire redéfinit (annule) la fonction virtuelle alors que, dans le cas d'une fonction virtuelle pure, la classe dérivée doit définitivement redéfinir la fonction virtuelle pure.
  3. Si la classe dérivée ne parvient pas à redéfinir (remplacer) la fonction virtuelle, elle peut utiliser la fonction virtuelle de la classe de base. Inversement, si une classe dérivée ne parvient pas à remplacer la fonction virtuelle pure, une erreur de compilation se produit.
  4. La classe de base contenant la fonction virtuelle peut être instanciée, c'est-à-dire que son objet peut être créé. Par contre, la classe de base contenant une fonction virtuelle pure, c’est-à-dire une classe abstraite, ne peut pas être instanciée car une classe abstraite n’est pas entièrement définie.

Remarque:
Le prototype de la «fonction virtuelle» et de la «fonction virtuelle pure» reste le même tout au long du programme.

Conclusion:

Les «fonctions virtuelles» et les «fonctions virtuelles pures» ont toutes deux leur importance, car dans les «fonctions virtuelles», toutes les classes dérivées n'ont pas besoin de redéfinir la fonction virtuelle et lorsque nous voulons que toutes les classes dérivées redéfinissent la fonction virtuelle, pure virtual la fonction s'applique le mieux là-bas.