Question

Et pourquoi ne pas utiliser la même méthode pour les fonctions non virtuelles?

Je veux dire, pourquoi utilisons-nous des fonctions virtuelles de cette façon? On ne peut pas simplement les utiliser comme les non-virtaul et les remplacer?

Et si cette méthode nous permet d'économiser du temps / espace ou ce que jamais, pourquoi ne pas utiliser la même méthode pour les fonctions non virtuelles? Je veux dire, il serait logique qu'il y aurait une table de fonctions pour une classe spécifique.

Quoi qu'il en soit, merci à l'avance, je suis un peu confus.

Était-ce utile?

La solution

Vous ne pouvez pas avoir polymorphisme exécution sans utiliser un niveau d'indirection. C'est ce que l'VPTR est pour.

Le VPTR n'est pas utilisé pour les fonctions non-polymorphes parce que indirection coûte quelque chose. La philosophie de C ++ est que vous ne payez pas pour ce que vous n'utilisez pas.

EDIT:

Voici quelques informations sur la façon dont fonctionnent les tables virtuelles: http://en.wikipedia.org/wiki/Virtual_table

Autres conseils

Le compilateur génère essentiellement un appel direct à des méthodes non virtuelles. Avec un appel de méthode virtuelle, le compilateur génère du code pour rechercher l'adresse de la méthode et fait ensuite un appel à cette adresse. Il est donc, en théorie, au moins une autre recherche lorsque vous appelez une fonction virtuelle. Il n'y aurait aucune raison d'engager ce coût autrement.

Utilisation VPTR permet la résolution de la méthode en fonction du type d'objet plutôt que le type variable. Ne pas utiliser VPTR fait plus rapidement les appels de méthode. Les concepteurs de C ++ a décidé de permettre à la commodité des fonctions virtuelles mais nécessitent pas la peine de performance pour d'autres fonctions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top