Maison  >  Article  >  développement back-end  >  Nouvelles fonctionnalités C++ 11 - polymorphisme et fonctions virtuelles, spécificateur de remplacement

Nouvelles fonctionnalités C++ 11 - polymorphisme et fonctions virtuelles, spécificateur de remplacement

php是最好的语言
php是最好的语言original
2018-08-01 14:11:432438parcourir

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 :

Nouvelles fonctionnalités C++ 11 - polymorphisme et fonctions virtuelles, spécificateur de remplacement

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 :

  1. Pointeur vers la classe de base

  2. Objet pointant vers la classe dérivée

  3. La classe dérivée remplace la fonction virtuelle définie dans 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 :

  1. le mot-clé virtuel n'est pas requis

  2. Il n'est pas nécessaire de déclarer la fonction comme publique

Échec de couverture

Remplacement de fonction virtuelle Il faut que les signatures des deux fonctions soient cohérentes. Par exemple, le code suivant :

Nouvelles fonctionnalités C++ 11 - polymorphisme et fonctions virtuelles, spécificateur de remplacement

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 :

Nouvelles fonctionnalités C++ 11 - polymorphisme et fonctions virtuelles, spécificateur de remplacement

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn