2009-04-20 6 views

Antwort

1

Ich weiß nicht, ob es zwei Möglichkeiten gibt, und ich weiß nicht, ob es reine vs. gemischte OO-Sprachen ist.

Grundsätzlich verwendet C++ virtuelle Tabelle Dispatch - jede Instanz trägt eine Tabelle von Funktionen (im Falle von C++, trägt er einen Zeiger auf die Tabelle, aber das spielt keine Rolle im Dispatch-Mechanismus), und wenn Sie Call x.my_method(), der Compiler kennt seine zB. die zweite Methode eines Objekts, also gibt es Code aus, um zu dem zweiten Zeiger in der virtuellen Methodentabelle zu springen.

In dynamischen Sprachen (und ObjC), ist es in der Regel gelöst durch ein Wörterbuch der Methoden irgendwo, wo zur Laufzeit der Name my_method nachgeschlagen wird und welche Funktion gefunden wird, ausgeführt wird.

Es gibt gemischte Ansätze - in COM, schauen Sie die Schnittstelle nach Identifikator; dann führen Sie eine Methode von ihrer vtable aus.

Manchmal wird Code wie eine switch-Anweisung (z. B. Schalter abhängig vom Typ eines Objekts) generiert, um den zweiten Ansatz zu beschleunigen.