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 />

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]

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!