Polymorphisme et fonctions virtuelles
Le polymorphisme est l'une des fonctionnalités importantes du C++, et c'est aussi une fonctionnalité difficile à comprendre pour les débutants. Regardons d'abord un exemple simple :
Le code est très simple Selon les propres mots de l'auteur, décrivez les points clés de la définition à la fonction de. polymorphisme dans le code ci-dessus. Cela ne sera plus simple, à partir de la fonction principale :
Pointeur vers la classe de base
Ces trois points sont des conditions nécessaires et aucun d'entre eux ne peut manquer.
Il y a d'autres choses intéressantes dans le code ci-dessus Bien que cela n'affecte pas les résultats, il est toujours bon de le comprendre. Lors de la redéfinition (remplacement) de la fonction virtuelle dans la classe de base dans la classe dérivée :
le mot-clé virtuel n'est pas requis
Échec de couverture
Remplacement de fonction virtuelle Il faut que les signatures des deux fonctions soient cohérentes. Par exemple, le code suivant :
Puisque la signature de sub2::f1 est incohérente avec la signature de base::f1, le polymorphisme ne peut pas être obtenu.
Peut-être pensez-vous que cette erreur est trop évidente et ne se produira jamais. C'est parce que la fonction membre dans cet exemple est trop simple. Dans le développement réel, avec l'expansion de l'échelle de développement, la relation d'héritage des classes deviendra de plus en plus profonde, et les paramètres des fonctions membres deviendront également de plus en plus nombreux. Nous rencontrons souvent les signatures et les remplacements des fonctions membres définies dans les classes dérivées. La signature de l'objet est incohérente, ce qui entraîne un échec d'écrasement.
Et le plus terrible, c'est que ce genre d'erreur ne produira pas d'erreurs de compilation et n'est pas facile à trouver.
spécificateur de remplacement
Afin de résoudre ce problème, une méthode a été introduite en C++11 : utiliser la spécification de remplacement lors de la déclaration et de la définition des fonctions de remplacement dans les classes dérivées Symboles :
En raison de l'objectif clair de la fonction, lorsque le compilateur ne peut pas trouver une fonction virtuelle avec la même signature dans la classe de base, une erreur de compilation se produit.
L'auteur estime
Mieux utiliser les fonctions du langage lui-même et ne renoncer à aucune opportunité de détecter automatiquement les erreurs Cela devrait devenir une habitude des programmeurs C++. Il peut être considéré comme l’incarnation de l’esprit artisanal.
Articles connexes :
Parlez en détail des spécificateurs finaux et de remplacement de C++11
auto et nouvelles fonctionnalités en C++ 11 différences et connexions decltype
Vidéos associées :
Nouvelles fonctionnalités d'Android 6.0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!