Skip to main content

Qu'est-ce qu'une fonction virtuelle?

Une fonction virtuelle est une fonction, définie dans une superclasse, qui doit être présente dans une sous-classe pour que cette sous-classe ait une définition complète de classe.Les fonctions virtuelles reposent sur un paradigme de programmation orienté objet appelé héritage virtuel, qui est le plus souvent visible dans C ++ en utilisant le mot-clé virtuel.Pour définir une fonction virtuelle, deux classes sont nécessaires, une superclasse et une sous-classe.La superclasse est l'endroit où la fonction est déclarée pour la première fois, et éventuellement définie.La sous-classe est l'endroit où la fonction est définie mdash;ou remplacé, selon que la fonction a été définie dans la superclasse.

La fonction virtuelle peut être définie de deux manières.Premièrement, il peut être défini comme un talon, dans lequel il a un corps vide et ne fait rien.Deuxièmement, il pourrait être défini comme une fonction virtuelle pure, où il est défini comme null dans le fichier d'en-tête Superclasss.

Il y a des avantages et des inconvénients aux deux méthodologies.Définir une fonction comme un stub garantit que toutes les sous-classes en ont une certaine implémentation, même si elle ne fait rien.Si l'on oublie de remplacer la fonction et de l'implémenter correctement dans une sous-classe, cependant, aucune erreur ou avertisseur ne semblera le souligner.La définition d'une fonction virtuelle pure, en revanche, nécessite que chaque sous-classe ait sa propre définition de la fonction, et les erreurs apparaîtront si ce n'est pas le cas.

Les fonctions virtuelles, cependant, sont soumises aux mêmes règles d'hérédité que non non nonLes fonctions virtuelles, donc les hiérarchies d'héritage avec plus de deux niveaux peuvent ne pas nécessiter des définitions explicites des fonctions virtuelles.Par exemple, on peut considérer une classe A qui déclare une fonction virtuelle, qui est implémentée dans la sous-classe B. La classe B a une sous-classe à part, la classe C. ne nécessite pas de définition explicite de la classe en fonction, car elle hériteLa définition de la classe B. Si nécessaire, la classe C pourrait remplacer la fonction de classe BS de classe, ou elle pourrait remplacer la fonction de classe BS tout en l'appelant également.

À l'autre extrême, les fonctions virtuelles n'ont pas à être définies dans une sous-classe si elles sont déclarées virtuelles dans cette sous-classe.Par exemple, on peut considérer une classe A qui déclare une fonction virtuelle et a deux sous-classes, B et C. De plus, on pourrait imaginer que la classe B a des sous-classes D et E, et la sous-classe C a des sous-classes F et G.

ClassesB à g tous doivent avoir la classe en tant que fonction virtuelle définie d'une manière ou d'une autre.Si la classe B a une implémentation de la fonction AS, les classes D et E n'ont pas besoin de refuser.Peut-être que les sous-classes CS doivent implémenter en fonction, mais elles font toutes les deux quelque chose de différent, donc définir la fonction dans la classe C elle-même ne serait pas utile.Dans ce cas, la fonction peut être déclarée virtuelle dans la classe C, et une implémentation n'est pas nécessaire.

Les fonctions virtuelles peuvent être intimidantes à apprendre, mais lorsqu'elles sont utilisées correctement, elles peuvent réduire la duplication du code et rendre le code beaucoup plus facile à comprendre en général.Il existe cependant de nombreux pièges avec des fonctions virtuelles, en particulier concernant l'héritage multiple.En héritage multiple, il est possible que les fonctions virtuelles définies ambiguës soient-elles confinées les unes avec les autres, ils doivent donc être utilisés avec prudence dans ce contexte.