virtual class in Funktion übergeben

  • Themenstarter Themenstarter elm
  • Beginndatum Beginndatum
Ohne Zeiger geht es nicht... du kannst nur noch Referenzen probieren:
C++:
int add_Taste(IKey & key);
 
Zuletzt bearbeitet von einem Moderator:
@ComFreek:
Ja, das ist das Prinzip der Virtual Method Table (kurz VMT). Alle virtuellen Funktionen stehen in dieser TAbelle am Anfang des Speichers deiner Instanz.

Beispiel:
Code:
class A
{
protected:
       virtual void foo() { ... }
};

Angenommen __A_foo wäre nach dem kompilieren an der Adresse 0xFF.

Nun kommt das Derivat:
Code:
class B : protected A
{
      void foo() { ... }
};

Und __B_foo steht an der Adresse 0xF0

Dann erstelen wir zwei Instanzen:
Code:
A a;  // Im ersten Eintrag der VMT von a steht jetzt 0xFF
B b; // Im ersten Eintrag der VMT von b steht jetzt 0xF0
A* pA = &b;  // Im ersten Eintrag der VMT von *pA steht immernoch 0xF0

Was passiert jetzt nun bei pA->foo() ? Der Compiler ruft die Adresse des ersten Eintrags der VMT von *pA auf, was ist 0xF0, also __B_foo.

Das gleiche Prinzip ist auch bei Interfaces so. Die VMT wird einfach übertragen. Das = 0 bedeutet, dass in der VMT des Interfaces 0 stünde, wenn sie nicht implementiert ist.
 
Zuletzt bearbeitet:
@Cromon: Danke für die ausführliche Erklärung. Aber meinen Namen schreibt man mit 2-E. (Sozusagen ein Eigenname:p)
 
Zurück