Il ne faut pas oublier que le C++ a aussi été conçu avec la performance comme but (par exemple calcul scientifique). Par exemple la STL n'utilise pas du tout les fonctions virtuelles. Maintenant je ne sais pas si le but a été atteint.
Le principal défaut des fonctions virtuelles est l'ajout d'un niveau d'indirection par une table de fonctions virtuelles. Cela empêche la mise en ligne des fonctions qui est un important moyen d'optimisation (voir gcc -03).
Il est vrai que le C++ ne facilite pas l'écriture de code objet.
Mais si on se force a déclarer toute les fonction virtuelles, a ne passer que des références, a ne pas utiliser de pointeurs, a n'hériter que d'une seule classe, a utiliser des classes purement virtuelles comme interface dont ont implémente toutes les méthodes, etc...
On obtient presque du java :-) (félicitation à ceux qui ont lu jusqu'au bout).
En résumé l'avantage du java par rapport au C++, c'est qu'il limite les possibilités d'écrire du code non objet.
[^] # Re: Erreurs de C++
Posté par Marc . En réponse à la dépêche C# et Java, une étude comparée. Évalué à 8.
Le principal défaut des fonctions virtuelles est l'ajout d'un niveau d'indirection par une table de fonctions virtuelles. Cela empêche la mise en ligne des fonctions qui est un important moyen d'optimisation (voir gcc -03).
Il est vrai que le C++ ne facilite pas l'écriture de code objet.
Mais si on se force a déclarer toute les fonction virtuelles, a ne passer que des références, a ne pas utiliser de pointeurs, a n'hériter que d'une seule classe, a utiliser des classes purement virtuelles comme interface dont ont implémente toutes les méthodes, etc...
On obtient presque du java :-) (félicitation à ceux qui ont lu jusqu'au bout).
En résumé l'avantage du java par rapport au C++, c'est qu'il limite les possibilités d'écrire du code non objet.