05.11.2013 Aufrufe

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

Vergleich von Delphi und Visual C++ - Inhalt

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Vergleich</strong> <strong>von</strong> <strong>Delphi</strong> <strong>und</strong> <strong>Visual</strong> <strong>C++</strong> - Kapitel 2C<br />

{<br />

printf("Ich bin ein<br />

R<strong>und</strong>Rechteck");<br />

};<br />

procedure R<strong>und</strong>Rechteck.Print;<br />

begin<br />

writeln('Ich bin ein<br />

R<strong>und</strong>Rechteck');<br />

end;<br />

Figur* F;<br />

R<strong>und</strong>Rechteck* RR;<br />

RR = new R<strong>und</strong>Rechteck;<br />

F = RR;<br />

F->print();<br />

// print() <strong>von</strong> Figur<br />

// aufgerufen!<br />

delete RR;<br />

var F: Figur;<br />

RR: R<strong>und</strong>Rechteck;<br />

RR:= R<strong>und</strong>Rechteck.Create;<br />

F:= RR;<br />

F.Print;<br />

// Print <strong>von</strong> Figur<br />

// aufgerufen!<br />

RR.Free;<br />

Ausgabe:<br />

Ich bin ein R<strong>und</strong>Rechteck<br />

Ausgabe:<br />

Ich bin ein R<strong>und</strong>Rechteck<br />

Wenn die Methoden print nicht virtuell deklariert worden wären, hätte man statt dessen die Ausgabe "Ich bin die Figur" erhalten.<br />

Dynamische Methoden sind nur in Object Pascal vertreten <strong>und</strong> werden durch die Angabe <strong>von</strong> "dynamic" anstelle <strong>von</strong> "virtual" deklariert.<br />

Sie verhalten sich exakt gleich wie virtuelle Funktionen, unterscheiden sich jedoch in der (internen) Implementierung. Um den Sinn<br />

dynamischer Methoden zu verstehen, muß man zunächst untersuchen, wie virtuelle Methoden durch die Compiler praktisch realisiert<br />

werden.<br />

In identischer Weise legen <strong>Visual</strong> <strong>C++</strong> <strong>und</strong> Object Pascal eine sogenannte virtuelle Methodentabelle, abgekürzt VMT, für jede Klasse<br />

(nicht für jedes Objekt!) an. Die VMT wird in <strong>C++</strong> manchmal auch V-Tabelle (abgekürzt vtbl) genannt. Sie stellt ein Array <strong>von</strong> 32 bit<br />

langen Pointern dar, die auf die virtuellen Methoden zeigen. Jede Methode, die einmal virtuell deklariert wurde, erhält hierin einen Eintrag:<br />

Die Anordnung der Einträge erfolgt in derselben Reihenfolge wie bei der Deklarierung. Der Compiler kodiert einen Methodenaufruf einer<br />

virtuellen Funktion als indirekten Aufruf über dieses Array anhand des Indexes der virtuellen Methode. Dieser Index ist zur Zeit der<br />

Compilierung bekannt <strong>und</strong> für alle Methoden in einer virtual/override-Sequenz einer Klassenhierarchie gleich. Jede Klasse bekommt eine<br />

vollständige Kopie der VMT der Elternklasse, die nach Bedarf vergrößert wird, wenn die Klasse neue virtuelle Methoden deklariert. Bei<br />

virtuellen Methoden, die in Nachfahren neu definiert werden (override), ersetzt der Compiler einfach die Adresse im entsprechenden<br />

Eintrag der VMT durch die der neuen Methode.<br />

http://ourworld.compuserve.com/homepages/praxisservice/kapit2c.htm (14 of 33) [19.05.2000 15:30:15]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!