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 />
erst zu einem späteren Zeitpunkt deklariert werden. Metaklassen können überall dort im Programm eingesetzt werden, wo auch direkt mit<br />
Klassen operiert wird:<br />
● Aufruf <strong>von</strong> Klassenmethoden<br />
● Prüfen <strong>und</strong> Wandeln <strong>von</strong> Typen mit den Operatoren "is" <strong>und</strong> "as"<br />
● polymorphes Konstruieren <strong>von</strong> Objekten (mit Hilfe eines virtuellen Konstruktors)<br />
In allen Fällen muß die tatsächliche Klasse nicht bereits zur Übersetzungszeit feststehen, sondern es wird zur Laufzeit die Klasse benutzt,<br />
die als Wert der Variablen vorgef<strong>und</strong>en wird.<br />
type<br />
TFigur = class<br />
constructor Create; virtual; // virtueller Konstruktor<br />
···<br />
end;<br />
TRechteck = class(TFigur)<br />
constructor Create; override;<br />
···<br />
end;<br />
TKreis = class(TFigur)<br />
constructor Create; override;<br />
···<br />
end;<br />
TFigurClass = class of Tfigur; // MetaKlasse<br />
var<br />
// Klassen-Referenz Variable<br />
ClassRef: TFigurClass;<br />
// Objekt-Instanz Variable<br />
Figur: TFigur;<br />
begin<br />
// Klassen-Referenz zeigt auf Klasse Kreis<br />
ClassRef:= TKreis;<br />
// polymorphes Erstellen eines Objekts vom Typ Kreis<br />
Figur:= ClassRef.Create;<br />
···<br />
// Objekt wieder freigeben<br />
Figur.Free;<br />
// Klassen-Referenz zeigt jetzt auf Klasse Rechteck<br />
ClassRef:= TRechteck;<br />
// polymorphes Erstellen eines Rechteck - Objekts<br />
Figur:= ClassRef.Create;<br />
···<br />
// Objekt wieder freigeben<br />
Figur.Free;<br />
end.<br />
Man muß beim polymorphen Konstruieren <strong>von</strong> Objekten beachten, daß die Konstruktoren der zu benutzenden Objekte als virtuell<br />
gekennzeichnet sind. Wenn das nicht der Fall ist, findet die Bindung bereits zur Übersetzungszeit statt. Es wird dann stets eine Instanz der<br />
Klasse erzeugt, zu der die Metaklasse der Variablen deklariert wurde (im Beispiel wäre das TFigur).<br />
Stroustrup bewertet in [6] Metaklassen als "sicher recht leistungsfähig", möchte sie aber andererseits nicht in <strong>C++</strong> implementieren: "Ich<br />
verwehrte mich damals nur gegen den Gedanken, jeden <strong>C++</strong> Programmierer mit diesen Mechanismen zu belasten zu müssen ...".<br />
http://ourworld.compuserve.com/homepages/praxisservice/kapit2c.htm (25 of 33) [19.05.2000 15:30:15]