2009-04-20 8 views

Répondre

1

Je ne sais pas s'il y a deux façons, et je ne sais pas si c'est un langage OO pur ou mixte. Fondamentalement, C++ utilise la distribution de table virtuelle - chaque instance porte une table de fonctions (dans le cas de C++, elle porte un pointeur vers la table, mais cela ne joue aucun rôle dans le mécanisme de répartition), et quand vous appelez x.my_method(), le compilateur connaît son exemple. la deuxième méthode d'un objet, donc il émet du code pour passer au second pointeur dans la table de méthode virtuelle.

Dans les langages dynamiques (et ObjC), il est généralement résolu en ayant un dictionnaire de méthodes quelque part, où, à l'exécution, le nom my_method est recherché et quelle que soit la fonction trouvée, il est exécuté.

Il existe des approches mixtes - dans COM, vous recherchez l'interface par identificateur; alors vous exécutez une méthode à partir de son vtable.

Parfois, du code semblable à une instruction de commutation (par exemple un commutateur dépendant du type d'objet) est généré pour accélérer la seconde approche.