Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
Vergleich von Delphi und Visual C++ - Inhalt
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]