Je sais que les fonctions virtuelles ont une surcharge de déférence à l'appel d'une méthode. Mais je suppose qu'avec d'architecture moderne de vitesse, il est presque négligeable.
- Est-il une raison particulière à toutes les fonctions en C++ ne sont pas virtuels comme en Java?
- De mes connaissances, la définition d'une fonction virtuelle dans une classe de base est suffisante ou nécessaire. Maintenant, quand j'écris une classe parent, je ne pourrais pas savoir quelles méthodes passerait-monté. Donc, est-ce à dire que lors de l'écriture d'un enfant de la classe, quelqu'un l'aurait à modifier la classe parent. Cela sonne comme gênant et parfois pas possible?
Mise à jour:
En résumant de Jon Skeet la réponse ci-dessous:
C'est un compromis entre explicitement ce qui rend quelqu'un de réaliser qu'ils sont héritiers de la fonctionnalité [qui a le potentiel de risques en eux-mêmes [(vérification de Jon réponse)] [et le potentiel des petits gains de performance] avec un compromis pour les moins de souplesse, plus de changements de code, et plus raide de la courbe d'apprentissage.
D'autres raisons de réponses différentes:
Fonctions virtuelles ne peuvent pas être doublé car inline se produire lors de l'exécution. Cela a un impact sur les performances lorsque vous pensez que vous des fonctions des avantages de l'in-lining.
Il y pourrait y avoir d'autres raisons, et je voudrais bien les connaître et de les résumer.